Entity framework core EF Core AsNoTracking和多个ThenIncludes不会在更深层次上填充
我有一个问题,我试图用一些集合填充一个对象,这些集合在其中一个集合中包含另一个集合,我也要填充该集合的对象。如果我不使用AsNoTracking(),一切正常。但是,当我使用AsNoTracking()时,我想要的深度嵌套对象不会被填充。下面是一个示例代码Entity framework core EF Core AsNoTracking和多个ThenIncludes不会在更深层次上填充,entity-framework-core,asp.net-core-2.1,.net-core-2.1,Entity Framework Core,Asp.net Core 2.1,.net Core 2.1,我有一个问题,我试图用一些集合填充一个对象,这些集合在其中一个集合中包含另一个集合,我也要填充该集合的对象。如果我不使用AsNoTracking(),一切正常。但是,当我使用AsNoTracking()时,我想要的深度嵌套对象不会被填充。下面是一个示例代码 DatabaseContext.Account .Include(lvl1 => lvl1.A) .Include(lvl1 => lvl1.B).ThenInclude(lvl2 => lvl2.C).Then
DatabaseContext.Account
.Include(lvl1 => lvl1.A)
.Include(lvl1 => lvl1.B).ThenInclude(lvl2 => lvl2.C).ThenInclude(lvl3 => lvl3.D)
.Include(lvl1 => lvl1.E).ThenInclude(lvl2 => lvl2.F)
.AsNoTracking()
.FirstOrDefault(lvl1 => lvl1.Id == id);
当我运行上面的代码时,除了lvl3.D之外,我的所有集合和对象都会被填充。当我删除AsNoTracking()时,lvl3.D被适当地填充。你知道为什么会这样吗?我也试着把AsNoTracking放在不同的地方,但我还是遇到了同样的问题
使用.Net Core 2.1以获得更好的性能,我建议如下使用join:
from account in AccountRepository.GetAll().AsNoTracking()
join lvl1 in lvl1Repository.GetAll().AsNoTracking()
on account.Id equals lvl1.AccountId
...
where lvl1.Id == id;
为了获得更好的性能,我建议像这样使用join:
from account in AccountRepository.GetAll().AsNoTracking()
join lvl1 in lvl1Repository.GetAll().AsNoTracking()
on account.Id equals lvl1.AccountId
...
where lvl1.Id == id;
这没有回答问题。这没有回答问题。可能是个bug。所有级别都应包括在内。A将有助于重现问题。可能是一个bug。所有级别都应包括在内。A将有助于重现这一问题。