gpt4 book ai didi

entity-framework - Entity Framework 6、事务范围、上下文和 SaveChanges

转载 作者:行者123 更新时间:2023-12-04 02:19:24 26 4
gpt4 key购买 nike

问题与事务范围和 context.SaveChanges() 有关。如果我正在使用 foreach 处理一百万条记录,并且我通过在事务范围内调用 context.SaveChanges() 来保存每条记录,比方说,1000 条记录处理完 10 000 个并调用 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?
}

最佳答案

只要在 DbContext 中注册了事务范围,事务范围就会优先,这是默认情况。

因此,如果您不调用 TransactionScope.Complete(例如,因为与 DbContext 相关的异常会将您抛出 using block ), 一切 都将如您所愿回滚。我鼓励您简单地尝试一下(最好使用侧面的分析器来准确监控正在发生的事情)。

简而言之,每个 SaveChanges 都会访问数据库,但不会提交。

关于entity-framework - Entity Framework 6、事务范围、上下文和 SaveChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com