我正試圖加密一些數據,其中我的表有五十萬條記錄。 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會關心告訴我應該如何提出更好的問題? –