我正试图加密一些数据,其中我的表有五十万条记录。 Fastest Way of Inserting in Entity Framework - - 这里的答案启发我试图块我的更新通过调用递归函数:EntityFramework中发生未处理的异常类型'System.StackOverflowException'
IDBContext context;
try{
context = new MyDbContext();
context.Configuration.AutoDetectChangesEnabled = false;
EncryptFields(context, 500, (count/500));
}
finally{
if (context != null)
{
context.Dispose();
}
}
递归函数在这里:
private static void EncryptFields(IDBContext context, int batchSize, int maxRetries)
{
Debug.WriteLine(maxRetries.ToString());
if (maxRetries == 0)
{
return;
}
var phones = context.Phones
.Where(p => !(p.Number == null
|| p.Number.Trim() == String.Empty))
.Take(batchSize)
.ToList();
if (phones.Count() > 0)
{
foreach (var phone in phones)
{
phone.Enc_Number = Encrypt(phone.Number);
}
context.SaveChanges();
context.Dispose();
context = new MyDBContext();
context.Configuration.AutoDetectChangesEnabled = false;
EncryptFields(context, batchSize, --maxRetries);
}
}
我开始了与1270 maxRetry
值,但当它下降到360,我就行了StackOverflow的异常:每次更新后
var phones = context.Phones...
鉴于我处置背景和重新创建500条记录,我不确定为什么我得到这个异常。
此异常不是EF造成的。它是由你的递归函数调用自己太深造成的。而不是递归使用循环。 – usr
downvoter会关心告诉我应该如何提出更好的问题? –