【发布时间】:2011-02-08 22:47:02
【问题描述】:
我正在尝试将事务与 EF4 代码优先与工作单元实现一起使用。我们不能从上下文中使用 Connection.BeginTransaction 有什么原因吗?它仅用于 SQL 事务?因为当我调用它时,我得到错误:非法操作。连接已关闭。
谢谢。
【问题讨论】:
我正在尝试将事务与 EF4 代码优先与工作单元实现一起使用。我们不能从上下文中使用 Connection.BeginTransaction 有什么原因吗?它仅用于 SQL 事务?因为当我调用它时,我得到错误:非法操作。连接已关闭。
谢谢。
【问题讨论】:
部分答案是 DbContext.SaveChanges() 是自动事务的,因此在许多情况下,您不需要滚动自己的事务。您的场景是什么,为什么您认为需要手动进行交易?
如果您决定需要它们,请将 SaveChanges 包装在事务中:
using (TransactionScope transaction = new TransactionScope())
{
context.SaveChanges();
}
如果您运行 Profiler,您会注意到一旦您离开 using{} 块,事务就会回滚。要提交您的事务,请调用 transaction.Complete();在 SaveChanges() 之后。
【讨论】:
using (TransactionScope s = context.Connection.BeginTransaction())