C# Entity Framework 6在具有相同上下文的多个插入上发生死锁
我在我的WCF服务中做了三次插入。其中两个在另一个库[类库项目]中,最后一个在服务本身中。我对所有3个插入使用相同的上下文,以便在第3个插入失败时回滚所有3个插入 My DBContext是基于unity和依赖项注入设置的:C# Entity Framework 6在具有相同上下文的多个插入上发生死锁,c#,entity-framework,wcf,C#,Entity Framework,Wcf,我在我的WCF服务中做了三次插入。其中两个在另一个库[类库项目]中,最后一个在服务本身中。我对所有3个插入使用相同的上下文,以便在第3个插入失败时回滚所有3个插入 My DBContext是基于unity和依赖项注入设置的: [Microsoft.Practices.Unity.Dependency, RegisterDependency(typeof(EmployeeEntities))] public EmployeeEntities EmployeeDb { get; set; } 下面
[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()
现在,如果我按顺序呼叫我的服务,一切正常。然而,当我模拟负载测试,引入一些并发调用时,服务开始失败
以下是我在跟踪上看到的错误:更新实体时出错。有关详细信息,请参见内部异常:
事务ProcessId 128在另一个进程的锁资源上被死锁,并被选为死锁牺牲品。重新运行事务
补充一个要点。我在类库中进行一些选择,以与现有数据进行比较。我猜这些选择要花很多时间。我的库中没有取消限制transactionscope Read。我只是传递上下文,用它进行选择和插入
大宗报价