首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架6、事务范围、上下文和SaveChanges

实体框架6、事务范围、上下文和SaveChanges
EN

Stack Overflow用户
提问于 2015-08-16 15:01:05
回答 1查看 1.5K关注 0票数 3

问题涉及事务范围和context.SaveChanges()。如果我使用一个foreach处理100万个记录,并且在每次保存之后,比方说,通过在事务范围内调用context.SaveChanges()来保存1000个记录,而在处理了10000个数据和调用了SaveChanges()之后,一些记录失败了,那么保存的数据会被回滚吗?示例:

代码语言:javascript
复制
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?
}
EN

回答 1

Stack Overflow用户

发布于 2015-08-16 16:16:42

只要注册了DbContext,事务作用域就优先,默认情况下,事务作用域是这样的。

因此,如果您不调用TransactionScope.Complete (例如,因为DbContext-related异常会将您抛出using块之外),那么一切都将如您所期望的那样回滚。我鼓励您简单地尝试一下(最好在侧设置一个分析器来监控到底发生了什么)。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32036488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档