【发布时间】:2010-08-19 10:03:20
【问题描述】:
我在使用 .NET 4 的新实体框架时遇到了一个奇怪的问题
我有一个 SQL Server 2005 (EXPRESS) 数据库,我的服务使用实体框架将数据写入两个表。假设表是 TableA 和 TableB。 TableB 具有 TableA 的外键。在我的程序中有几个并行写入数据的线程。每个线程都有自己的 ObjectContext。该程序创建 TableA 对象并将其放入对象上下文中。然后创建 TableB 的对象并将其放入对象上下文。这对几个 TableA 项目重复。
最后当 ObjectContext.Save 方法被调用时,我在日志中看到一个死锁错误:
System.Data.SqlClient.SqlException:事务(进程 ID 56)在锁资源上与另一个进程死锁,并已被选为死锁牺牲品。重新运行事务。
它似乎在某种程度上取决于数据库选项,因为它仅在特定数据库上重现。一个新的数据库没有重现该问题。 Entity Framework 执行批量插入时,哪些数据库\表设置会影响死锁?或者可能是其他地方的问题?
【问题讨论】:
-
嘿...看来我找到了答案。 TableB 没有在重现问题的数据库中设置 primaryKey。
-
可以在此处找到对问题和解决方案的更详细说明:stackoverflow.com/questions/52276034/…
标签: sql-server sql-server-2005 entity-framework-4 deadlock database-deadlocks