我在数据模型类中有一个相当简单的方法,它只是插入一行并保存更改。它正确地处理了大约227条记录[在408中],然后返回OutofMemoryException。即使我们只处理单行条目并保存更改,也会发生这种情况。有任何想法如何解决这种情况?
protected ADMIN_DB_Entities _AdminEntities = new ADMIN_DB_Entities();
public void InsertBase64Payload(string sBase64PayloadValue, string sSourceValue, Guid gSourcePrimaryKey, DateTime dDateProcessed)
{
Base64Payload newBase64PayLoadEntry = new Base64Payload();
newBase64PayLoadEntry.BASE64_VALUE = sBase64PayloadValue;
newBase64PayLoadEntry.SOURCE_TABLE = sSourceValue;
newBase64PayLoadEntry.SOURCE_PRIMARY_KEY = gSourcePrimaryKey;
newBase64PayLoadEntry.DATE_PROCESSED = dDateProcessed;
}
try
{
_AdminEntities.Base64Payload.Add(newBase64PayLoadEntry);
_AdminEntities.SaveChanges();
}
catch (Exception ex)
{
ConsoleAppLog.WriteLog(<Error Message here.>)
}
答案 0 :(得分:2)
我认为你正在使用非常大的base64“有效载荷”。
EntityFramework的DbContext
将实体的状态保存在内存中。因此,即使将更改保存到数据库中,这些值也将位于进程内存中。 DbContext
实现IDisposable
接口,因此在这种情况下,最好在将所需数据保存到数据库后配置上下文:
using (var entites = = new ADMIN_DB_Entities())
{
try
{
entities.Base64Payload.Add(newBase64PayLoadEntry);
entities.SaveChanges();
}
catch (Exception ex)
{
ConsoleAppLog.WriteLog(ex.Message);
}
}
注意:请记住,有一种机制可以从内部数据库上下文的跟踪中取消/附加特定实体,因此如果需要,您还可以使用单个DbContext
实例。