事务(进程 ID82)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。 返回
public async Task<APIResult> GetScanList()
{
List<object> data = new List<object>();
var list = await db.Queryable<h_tk_sacnlist>()
.Where(v => v.created_by == App.HttpUser.UID && v.isru == false)
.LeftJoin<h_tk_purchaseorderentry>((v, entry) => v.pentryid == entry.id.ToString())
.OrderByDescending(v => v.created_time)
.Select((v, entry) => new
{
v.id,
v.syminfo,
v.pentryid,
v.cymaterial,
v.reqty,
v.cymaterialid,
v.cymaterialname,
v.unit,
v.iskfperiod,
v.isru,
v.period,
v.periodunit,
v.specs,
v.qty,
v.sxqty,
v.parentid,
v.sqty,
v.producedate,
inventoryqty = SqlFunc.IIF(entry.id != null, entry.inventoryqty, 0)
})
.ToListAsync();
list.ForEach(m =>
{
data.Add(new
{
scanid = m.id.ToString(),
id = m.pentryid,
cymaterial = m.cymaterial,
reqty = m.reqty,
cymaterialid = m.cymaterialid,
cymaterialname = m.cymaterialname,
unit = m.unit,
iskfperiod = m.iskfperiod,
isru = m.isru,
period = m.period,
periodunit = m.periodunit,
specs = m.specs,
qty = m.qty,
sxqty = m.sxqty,
parentid = m.parentid,
sqty = m.sqty,
producedate = m.producedate.ParseToTime(),
username = App.HttpUser.Name,
inventoryqty = m.inventoryqty,
syminfo = m.syminfo
});
});
return new APIResult()
{
Data = new
{
data
}
};
}
这段代码总是报这个错误
热忱回答(3)
-
ৡ听风念故人 VIP0
1个月前MoreSettings = new ConnMoreSettings
{
IsAutoRemoveDataCache = true,
SqlServerCodeFirstNvarchar = true, //sqlserver默认使用nvarchar
IsWithNoLockQuery = true,//是否自动添加 WITH(NOLOCK)(允许脏读) 主查询
IsWithNoLockSubquery = true, //子查询
DisableWithNoLockWithTran = true//新功能:事务禁用NoLock
},
"ConnectionString": "Server=.;Database=DJYOLD;User Id=sa;Password=123456;Connect Timeout=500;Encrypt=True;TrustServerCertificate=True;MultipleActiveResultSets=True;Max Pool Size=512;"这是我的配置0 回复 -
日月星辰坠 VIP0
1个月前SQL SERVER 数据库这个问题,我也遇到过,不用开脏读,我教你一招,

-- 在数据库级别启用行版本控制(需要单用户模式或无活动连接)
ALTER DATABASE YourDatabaseName SET READ_COMMITTED_SNAPSHOT ON;
相关文档:
事务锁定和行版本控制指南
https://learn.microsoft.com/zh-cn/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server-ver16你开了脏读还死锁,说明是真的有死锁,
可以看微软的死锁指南排查下
以及写个扩展事件,抓一下死锁发生时到底是哪几个事务的SQL 死锁了,
不会写,可以问Ai
我经过上述的一系列操作,成功解决了这个问题。
0 回复 -
fate sta VIP0
1个月前1、查询要启nolock
2、启用NOLOCK还有这个错一般是并发超过数据库处理能力
0 回复