导航属性始终为null

时间:2019-12-27 09:48:05

标签: entity-framework-core

默认情况下,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

谢谢, 神圣的

2 个答案:

答案 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

可以肯定的是,您可以按照上面的答案使用延迟加载,但是通常不建议这样做。