事务(进程ID 98)在锁资源上与另一个进程发生死锁,并被选为死锁受害者.重新运行事务
本文关键字:死锁 事务 进程 重新运行 受害者 被选为 另一个 ID 资源 | 更新日期: 2023-09-27 17:49:30
据我所知,抛出这个异常是因为我的多个线程试图访问数据库上的相同数据。但是在将可枚举对象转换为列表的行中抛出异常。
有人能解释一下吗?
(Program.GetContext(),用于获取当前线程上下文到数据库,因为它是多线程的,并使用EF,这是一种方法)
var loadedSammenSat = Program.GetContext().SammensatKodetVaerdier.Where(o => (o.Kode == kode) && (o.Kodetekst == kodetekst) && (o.Forkortelse == forkortelse) && (o.Navn == navn)).Include(b => b.Tillaegskode).ToList();
if (!sammensatKodet.Tillaegskode.Any())
{
var selceted = loadedSammenSat.FirstOrDefault(o => (o.Tillaegskode == null || o.Tillaegskode.Count == 0));
if (selceted != null)
return selceted;
}
else
{
var selcetedWithOutList = loadedSammenSat.Where(o => (o.Tillaegskode != null && o.Tillaegskode.Count() == sammensatKodet.Tillaegskode.Count()));
var selceted = selcetedWithOutList.ToList(); //LINE THAT THROW EXCEPTION!!
if (selceted.Count() > 0)
{
List<DBTillaegsKode> list = new List<DBTillaegsKode>();
sammensatKodet.Tillaegskode.ForEach(p => list.Add(new DBTillaegsKode(p.KodetVaerdi)));
foreach (var dbSammensatKodetVaerdi in selceted)
{
var mismatch = dbSammensatKodetVaerdi.Tillaegskode.Except(list);
if(mismatch.GetEnumerator().Current != null)
if (mismatch.Count() == 0)
{
return dbSammensatKodetVaerdi;
}
}
}
}
LINQ是惰性加载的-只有当您对结果集执行某些操作时(在本例中执行.ToList()
操作),查询才会执行。