ADO.Net实体框架事务

3
我希望向您询问在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();

删除包含“tran”的行。 - İsmet Alkan
如果您想在一个事务中进行多个 SaveChanges() 调用,请使用 TransactionScope - Gert Arnold
2个回答

6
要在EF中“提交”“事务”,只需调用context.SaveChanges()
内部上,SaveChanges打开连接,启动数据库事务,将上下文跟踪的所有待处理更改推送到存储库,提交事务并释放连接。如果在保存更改期间出现任何错误,则回滚数据库事务。
要“回滚”“事务”,只需丢弃上下文实例。
通常情况下,不需要使用EF外部数据库事务。
请注意,我在引号中使用“事务”,因为EF上下文的更改跟踪器不等同于数据库事务。当您对上下文跟踪的数据进行更改时,这些更改不会立即影响存储库。它们是待处理的,直到您调用SaveChanges

我理解,SaveChanges会自动调用事务,在出现错误时回滚内容,如果一切都没有错误,则将内容存入数据库并提交事务。 - TheChampp

0

EF有TransactionScope,它是本地数据库事务的类似物。TransactionScope在应用程序层上工作,但行为类似于数据库事务,并由EF内部支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接