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



所以,在疯狂了3个小时,在网上到处寻找之后,我强迫自己在这里问。我已经使用实体框架超过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; }
}

在我的"业务单元"配置中,我声明:

        this
            .HasRequired(c => c.Company)
            .WithMany(c => c.BusinessUnits)
            .HasForeignKey(c => c.CompanyId);

以下工作:

  • 通过这两个实体的数据库集分别查询它们
  • 访问我的"业务单元"检索实体上的N比1"公司"导航属性

以下不起作用:

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

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

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

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

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

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

这个问题似乎是由C#的自动属性特性的新初始化程序引起的。

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

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

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; }
}

最新更新