默认情况下,ef核心(v3.1.0)导航属性始终为空
但是,当我加载导航属性并尽早加载时,它可以工作。
var companies = context.Companies.Include(e=>e.Employees); // this works
var e1 = companies.First().Employees;
var companies = context.Companies; // this does n't work
var e1 = companies.First().Employees; // error
我想念什么吗?以下是重现此问题的示例代码。
https://dotnetfiddle.net/#&togetherjs=75UdrcwNs7
谢谢, 神圣的
答案 0 :(得分:0)
我找到了解决方案。
添加nuget包Microsoft.EntityFrameworkCore.Proxies
在DataContext类上启用以下( UseLazyLoadingProxies )
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=Orders")
.UseLazyLoadingProxies();
}
}
答案 1 :(得分:0)
不,您没有丢失任何东西。应该像在您的第一个代码片段中一样手动加载相关属性。这是为了使数据库操作简单高效,其想法是仅加载该操作中真正需要的内容。 更多信息:https://docs.microsoft.com/en-us/ef/core/querying/related-data
可以肯定的是,您可以按照上面的答案使用延迟加载,但是通常不建议这样做。