ADO.Net实体框架事务

时间:2013-01-24 07:59:18

标签: c# sql entity-framework ado.net transactions

我想问一下在ADO.Net Entity Framework(调用,回滚,提交)中使用事务的正确方法是什么?我有这个代码,但这给了我异常

"Invalid operation. The connection is closed." 

(在此代码中NorthwindEntities继承“DBContext”)

NorthwindEntities context = new NorthwindEntities();
DbTransaction tran = context.Database.Connection.BeginTransaction();
var cust = context.Customers.FirstOrDefault(x => x.CustomerID == "BOLID");
cust.Country = "Nigeria";
context.SaveChanges();
tran.Rollback();

2 个答案:

答案 0 :(得分:6)

要在EF中提交“交易”,只需致电context.SaveChanges()即可。

在内部,SaveChanges打开一个连接,启动一个db事务,将所有挂起的更改推送到存储,提交事务并处置连接。如果在保存更改期间出现任何错误,则会回滚db事务。

回滚“事务”,只需丢弃上下文实例。

通常,不需要在EF中使用外部数据库事务。

注意,我在引号中使用“transaction”,因为EF context的更改跟踪器不等同于db transaction。当您对数据进行一些更改(按上下文跟踪)时,这些更改不会立即影响存储。它们待定,直到您拨打SaveChanges

答案 1 :(得分:0)

EF使TransactionScope成为本机数据库事务的模拟。 TransactionScope适用于您的应用程序层,但行为与数据库事务类似,并由EF内部支持