实体框架4交易范围

时间:2011-09-23 06:55:40

标签: entity-framework transactions scope

我在一个函数中运行了2个INSERTS。第一个是非实体框架INSERT(AD0.NET)。第二个是EntityContext.SaveChanges()

我可以不在交易范围内嵌套这两个吗?

2 个答案:

答案 0 :(得分:0)

是的,你可以

using (TransactionScope scope = new TransactionScope())
{

   InsertRecord();

   context.SaveChanges();

   scope.Complete();
}

答案 1 :(得分:0)

正如Eranga所说,这是完全可行的,如果有些混乱。

请参阅this link for peace of mind on TransactionScope

还要考虑为事务范围设置隔离级别,例如

TransactionOptions options = new TransactionOptions();
options.IsolationLevel = IsolationLevel.Serializable;

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
// Do something here
}

两个不同的数据库插入(两个不同的并发连接)将导致transactioncope升级到分布式事务。使用DTCPIng.exe进行测试可以在问题中的机器之间进行测试。

P.S。不同的数据库具有自己的默认隔离级别,因此最佳做法是在代码中指定它,例如SQL Server Express默认使用Serializable,SQL Server(完整版)不使用!