实体框架6在具有相同上下文的多个插入上死锁

时间:2015-04-28 19:22:29

标签: c# entity-framework wcf

我在WCF服务中执行了三次插入操作。其中两个在另一个库[类库项目]中,最后一个在服务本身内。我对所有3个插入使用相同的上下文,这样如果第3个失败,我可以回滚所有3个。

我的DBContext是基于统一和依赖注入设置的:

[Microsoft.Practices.Unity.Dependency, RegisterDependency(typeof(EmployeeEntities))]
public EmployeeEntities EmployeeDb { get; set; }

以下是我的代码执行插入的方式。

using (TransactionScope tr = new TransactionScope(TransactionScopeOption.Required,new TransactionOptions{IsolationLevel=System.Transactions.IsolationLevel.ReadUncommitted}))
            {
            using (DbContextTransaction dbTransaction = EmployoeeDb.Database.BeginTransaction()) 
library.insertOne(EmployeeDb)
library.insertTwo(EmployeeDb)
EmployeeDb.Add(something); EmployeeDb.SaveChanges()

如果我按顺序调用我的服务,现在一切正常。但是,当我模拟负载测试时,引入一些并发调用,服务开始失败。

这是我在Traces上看到的错误:更新实体时发生错误。有关详细信息,请参阅内部异常 事务(ProcessId 128)与另一个进程在锁资源上死锁,并被选为死锁牺牲品。重新运行交易

添加重点。我在类库中做了一些选择,以便与现有数据进行比较。我猜的那些选择花了很多时间。我没有在我的库上使用transactioncope readuncommited。我只是传递上下文,选择并插入它。

  

块引用

0 个答案:

没有答案