【问题标题】:Connection.BeginTransaction and Entity Framework 4?Connection.BeginTransaction 和实体框架 4?
【发布时间】:2011-02-08 22:47:02
【问题描述】:

我正在尝试将事务与 EF4 代码优先与工作单元实现一起使用。我们不能从上下文中使用 Connection.BeginTransaction 有什么原因吗?它仅用于 SQL 事务?因为当我调用它时,我得到错误:非法操作。连接已关闭。

谢谢。

【问题讨论】:

    标签: entity-framework-4


    【解决方案1】:

    部分答案是 DbContext.SaveChanges() 是自动事务的,因此在许多情况下,您不需要滚动自己的事务。您的场景是什么,为什么您认为需要手动进行交易?

    如果您决定需要它们,请将 SaveChanges 包装在事务中:

        using (TransactionScope transaction = new TransactionScope())
        {
            context.SaveChanges();
        }
    

    如果您运行 Profiler,您会注意到一旦您离开 using{} 块,事务就会回滚。要提交您的事务,请调用 transaction.Complete();在 SaveChanges() 之后。

    【讨论】:

    • 我认为我需要进行手动事务,因为没有机制可以实际回滚在 SaveChanges() 之前对上下文所做的更改(如果我错了,请纠正我)。如果发生异常怎么办?当您说“您会注意到,一旦您离开 using{} 块,事务就会回滚”,您的意思是什么时候会发生异常?
    • 如果事务未完成,是否回滚数据库中的所有更改?
    • 或者我应该用这样的东西替换它:using (TransactionScope s = context.Connection.BeginTransaction())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多