Вопрос относится к области транзакций и context.SaveChanges()
. Если я обрабатываю миллион записей с , и я сохраняю после каждого, скажем, 1000 записей, вызывая context.SaveChanges()
внутри области транзакции, и что-то не удается после того, как 10 000 были обработаны и вызвал SaveChanges()
, уже сохраненные данные будут откатны ? пример:Entity Framework 6, область транзакций, контекст и saveChanges
using(TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew, new TimeSpan(0, 10, 0)))
{
int counter = 0;
using (MyEntities context = new MyEntities())
{
foreach(var item in context.Items)
{
//process item
if(counter >= 1000)
{
context.SaveChanges(); //if fail here, will already saved changes be rolled back?
counter = 0
}
}
context.SaveChanges();
}
ts.Complete();//what about here?
}
Возможно, это всего лишь пример. Но если вы собираетесь сохранить миллион строк, лучше взгляните на более эффективные решения. Например, https://github.com/MikaelEliasson/EntityFramework.Utilities#batch-insertentities (который я поддерживаю) вставляет это в 10 с-20 на достойном компьютере. –