Entity Framework 6 在其他数据库调用后加载子对象
Entity Framework 6 loading child objects after other database call
我正在进行一个简单的数据库调用,以从 table 加载值。延迟加载被禁用并且它正常工作,这意味着它不会填充相关的 tables.
例如
IEnumerable<FAR> fars = await ctx.FARs.ToListAsync();
会 return 来自此 table 的列表。在此列表中,存在与 "Projects" table 的关系。此查询运行后,"fars[n].Projects" 为空,这是正确的。
现在我想获取 "Projects" 的列表,并且只关联其子项的顶级 "Project" 和 none。
List<Project> projects = ctx.Projects.ToList();
我一抓到 "Projects" 的列表,"fars[n].Projects" 就突然被填满了。
没有分配,它们是 2 个单独的数据库调用。我查看了数据库中的查询 运行。没有其他电话正在进行。
为什么突然将这些 "Projects" 添加到我原来的实体变量中?
解决方案是在查询中包含 AsNoTracking()
。
正确的代码是
IEnumerable<FAR> fars = await ctx.FARs.ToListAsync();
希望这可以帮助其他人解决他们的性能问题:)
我正在进行一个简单的数据库调用,以从 table 加载值。延迟加载被禁用并且它正常工作,这意味着它不会填充相关的 tables.
例如
IEnumerable<FAR> fars = await ctx.FARs.ToListAsync();
会 return 来自此 table 的列表。在此列表中,存在与 "Projects" table 的关系。此查询运行后,"fars[n].Projects" 为空,这是正确的。
现在我想获取 "Projects" 的列表,并且只关联其子项的顶级 "Project" 和 none。
List<Project> projects = ctx.Projects.ToList();
我一抓到 "Projects" 的列表,"fars[n].Projects" 就突然被填满了。
没有分配,它们是 2 个单独的数据库调用。我查看了数据库中的查询 运行。没有其他电话正在进行。
为什么突然将这些 "Projects" 添加到我原来的实体变量中?
解决方案是在查询中包含 AsNoTracking()
。
正确的代码是
IEnumerable<FAR> fars = await ctx.FARs.ToListAsync();
希望这可以帮助其他人解决他们的性能问题:)