Entity framework core EF Core AsNoTracking和多个ThenIncludes不会在更深层次上填充

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

我有一个问题,我试图用一些集合填充一个对象,这些集合在其中一个集合中包含另一个集合,我也要填充该集合的对象。如果我不使用AsNoTracking(),一切正常。但是,当我使用AsNoTracking()时,我想要的深度嵌套对象不会被填充。下面是一个示例代码

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将有助于重现这一问题。