实体框架死锁问题

时间:2010-08-19 10:03:20

标签: sql-server sql-server-2005 entity-framework-4 deadlock database-deadlocks

我遇到了新的.NET 4实体框架的奇怪问题

我有一个SQL Server 2005(EXPRESS)数据库,我的服务使用实体框架将数据写入两个表。假设表是TableA和TableB。 TableB具有TableA的外键。在我的程序中,有几个线程并行写入数据。每个线程都有自己的ObjectContext。该程序创建TableA对象并将其放在对象上下文中。然后创建TableB的对象并将其放到对象上下文中。这会重复几个TableA项目。

最后,当调用ObjectContext.Save方法时,我在日志中看到了死锁错误:

System.Data.SqlClient.SqlException:事务(进程ID 56)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行交易。

它似乎以某种方式依赖于数据库选项,因为它仅在特定数据库上重现。一个新的数据库没有重现该问题。实体框架执行批量插入时,哪些数据库\表设置可以影响死锁?或者可能是其他地方的问题?

1 个答案:

答案 0 :(得分:1)

根据你的评论:

  

TableB没有在问题所在的数据库中设置primaryKey   再现