3

我想问在 ADO.Net Entity Framework (call,rollback,commit) 中使用事务的正确方法是什么?我有这段代码,但这给了我例外

"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();
4

2 回答 2

6

要在 EF 中提交“事务”,只需调用context.SaveChanges().

在内部,SaveChanges打开一个连接,启动一个数据库事务,将上下文跟踪的所有未决更改推送到存储,提交事务并释放连接。如果在保存更改期间出现任何错误,则数据库事务正在回滚。

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

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

请注意,我在引号中使用“事务”,因为 EF 上下文的更改跟踪器不等同于 db 事务。当您对由上下文跟踪的数据进行一些更改时,这些更改不会立即影响存储。他们正在等待,直到您致电SaveChanges

于 2013-01-24T08:02:40.210 回答
0

EF 的 TransactionScope 类似于本地数据库事务。TransactionScope 适用于您的应用程序层,但行为类似于 db 事务并受 EF 内部支持)

于 2013-02-13T05:13:45.850 回答