在EF执行数据库查询时,如果查询语句中,有连接查询语句时,就会产生对表进行锁定,如果此时对锁定的表再次加锁操作(delete ,insert)就会死锁。
检查的方法:
1、查询出现死锁的记录
2、分析记录来对EF语句进行调整
一、下面来说一下怎样来查询死锁相关的表(SQL Profiler)【此部分参考:】
一个方便直观的方法就是使用SQL Server Profiler来查看死锁,本篇主要讲解这种方法,具体步骤如下:
步骤1:打开SQL Server Profiler
通过”Microsoft SQL Server Management Studio->Tools->SQL Server Profiler“运行SQL Server Profiler
步骤2:打开之后按照如下图所示,设置trace properties的General标签页上的属性
步骤3:按照右图所示,设置Events Selection,设置完之后点击“Run”按钮开始跟踪事件。
步骤4:等待死锁发生,查看事件信息,找到Deadlock Graph查看死锁,如右图所示。
按照如下步骤可以产生死锁:
1.在SQL Server management studio中,打开一查询,输入如下语句:
1: BEGINTRANSACTION
2:
update AdventureWorks.Person.Address
4:
'a'
6:
where AddressID=1
8:
'00:00:10'
10:
update AdventureWorks.Person.Address
12:
'b'
14:
where AddressID=2