据我所知,抛出此异常是因为我的多个线程试图访问数据库上的相同数据。但是异常会抛出一行,我将一个枚举转换为一个列表。
任何人都能解释一下吗?
(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;
}
}
}
}
答案 0 :(得分:2)
LINQ是延迟加载的 - 只有当您对结果集执行某些操作(在这种情况下执行.ToList()
操作)时才会执行查询。