实体框架 6“HasRequired”和“WithMany”部分工作 - 未按预期工作

Mat*_*sca 5 .net c# entity-framework entity-framework-6

因此,在疯狂地搜索了三个小时并在网上到处寻找之后,我强迫自己在这里问。我使用实体框架已有 5 年多了,但从未遇到过下面描述的那种问题

我有两个 POCO 类(已编辑):

public class Company
{
    public virtual ICollection<BusinessUnit> BusinessUnits { get; protected set; } = new List<BusinessUnit>();

    public int Id { get; protected set; }
}

public class BusinessUnit
{
    public virtual Company Company { get; protected set; } = new Company();

    public int CompanyId { get; protected set; }

    public string Description { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)

在我的“BusinessUnit”配置中我声明:

        this
            .HasRequired(c => c.Company)
            .WithMany(c => c.BusinessUnits)
            .HasForeignKey(c => c.CompanyId);
Run Code Online (Sandbox Code Playgroud)

以下作品:

  • 通过 DbSet 分别查询 2 个实体
  • 访问我的“BusinessUnit”检索实体上的 N 到 1“公司”导航属性

以下不起作用:

  • 检索到的“Company”实体上的 1 到 N“BusinessUnits”导航属性始终为 NULL,即使使用“Include”进行预加载也是如此

根据 EF 指南和我的经验,我已经在做的事情是正确的:

  • 延迟加载已启用(1 导航确实有效)
  • 代理已启用(与上面相同)
  • ICollection 是虚拟的,因此为其启用了延迟加载
  • 映射的“HasRequired”部分正在工作,我可以访问“BusinessUnit”实体上的“Company”代理

我尝试将属性设置器更改为公共,但仍然不起作用/解决问题

这没有明显的理由行为不当。我显然错过了一些东西,但我不知道是什么。

使用的 Entitfy Framerowk 版本是 .Net 4.6 上的 6.1.3,通过 NuGet 包安装。

Alb*_*reo 4

该问题似乎是由 C# 6自动属性功能的新初始化程序引起的。

如果初始化“内联”属性,实体框架会中断一对多关系。

删除初始值设定项,导航属性应该会再次工作。

public class Company
{
    public virtual ICollection<BusinessUnit> BusinessUnits { get; protected set; }

    public int Id { get; protected set; }
}

public class BusinessUnit
{
    public virtual Company Company { get; protected set; }

    public int CompanyId { get; protected set; }

    public string Description { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)