EF Code First DBContext 和事务
Posted
技术标签:
【中文标题】EF Code First DBContext 和事务【英文标题】:EF Code First DBContext and Transactions 【发布时间】:2011-08-27 02:00:00 【问题描述】:我想知道用DBContext
实现交易的最佳方式是什么。特别是,
-
如果我更改多个实体,
DbContext.SaveChanges
是否在内部实现事务?
如果我想多次调用DbContext.SaveChanges
(相同的contxet/不同的contxets),如何实现交易?
【问题讨论】:
【参考方案1】:-
是的。
SaveChanges
在内部使用事务。
使用TransactionScope
包装对SaveChanges
的多个调用
例子:
using(var scope = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions IsolationLevel = IsolationLevel.ReadCommitted ))
// Do something
context.SaveChanges();
// Do something else
context.SaveChanges();
scope.Complete();
【讨论】:
确保使用 Sql 2008 或更高版本作为数据库(或在客户端上运行 MSDTC 服务)。以前的版本会将事务升级为第二个SaveChanges
上的分布式事务。这是由于DbContext
在内部如何处理其连接的打开和关闭。
是否可以从第一次保存更改中获取身份?我总是看到 Id = 0。
@JarrettV - 我认为您的问题是由于 IsolationLevel 设置。降低它可能会有所帮助...
这不适用于 EF 4.3.1。在调用 context.SaveChanges() 之前,我们必须显式打开 Objectcontext 上的连接。
@renegadeMind:这当然适用于 DbContext。您所描述的是当您想要避免分布式事务时使用的高级方式。以上是关于EF Code First DBContext 和事务的主要内容,如果未能解决你的问题,请参考以下文章