Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 实体框架死锁问题_Sql Server_Sql Server 2005_Entity Framework 4_Deadlock_Database Deadlocks - Fatal编程技术网

Sql server 实体框架死锁问题

Sql server 实体框架死锁问题,sql-server,sql-server-2005,entity-framework-4,deadlock,database-deadlocks,Sql Server,Sql Server 2005,Entity Framework 4,Deadlock,Database Deadlocks,对于.NET4的新实体框架,我遇到了一个奇怪的问题 我有一个SQLServer2005(EXPRESS)数据库,我的服务使用EntityFramework将数据写入两个表。假设桌子是桌子A和桌子B。TableB具有TableA的外键。在我的程序中,有几个线程并行写入数据。每个线程都有自己的ObjectContext。程序创建一个对象并将其放入对象上下文中。然后创建TableB的对象并将其置于对象上下文中。对于多个TableA项目重复此操作 最后,当调用ObjectContext.Save方法时,

对于.NET4的新实体框架,我遇到了一个奇怪的问题

我有一个SQLServer2005(EXPRESS)数据库,我的服务使用EntityFramework将数据写入两个表。假设桌子是桌子A和桌子B。TableB具有TableA的外键。在我的程序中,有几个线程并行写入数据。每个线程都有自己的ObjectContext。程序创建一个对象并将其放入对象上下文中。然后创建TableB的对象并将其置于对象上下文中。对于多个TableA项目重复此操作

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

System.Data.SqlClient.SqlException:事务(进程ID 56)在另一个进程的锁资源上被死锁,并被选为死锁受害者。重新运行事务

它似乎在某种程度上取决于数据库选项,因为它只在特定的数据库上复制。一个新的数据库没有复制该问题。实体框架执行批插入时,哪些数据库\表设置会影响死锁?或者可能是其他地方的问题?

根据您的评论:

TableB未在发生问题的数据库中设置primaryKey 复制


嘿。。。看来我找到了答案。表B没有在重现问题的数据库中设置primaryKey。此处可以找到关于问题和解决方案的更详细解释: