2011-02-08 110 views
0

我正在尝试使用EF4 Code-first与单位工作实现的交易。是否有我们不能从上下文中使用Connection.BeginTransaction的原因?它仅用于SQL事务中吗?因为当我调用它时,我得到错误:非法操作。连接已关闭。Connection.BeginTransaction和Entity Framework 4?

谢谢。

回答

1

答案的一部分将是DbContext.SaveChanges()是自动事务性的,因此在很多情况下,您不需要推出自己的事务。你的情况是什么,为什么你认为你需要手动做交易?

如果你决定你需要他们,包裹中的SaveChanges交易:

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

如果您运行的探查,你会注意到,一旦你离开了使用{}块中的事务回滚。要提交您的交易,请调用transaction.Complete();在SaveChanges()之后。

+0

我认为我需要做手动事务,因为没有任何机制实际回滚SaveChanges()前的上下文所做的更改(如果我错了,请更正我)。发生异常会发生什么?当你说“你会注意到,一旦你离开使用{}块,交易回滚”你的意思是什么时候会发生异常? – Rushino 2011-02-09 12:32:23