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

时间:2015-12-29 11:09:49

标签: c# .net entity-framework entity-framework-6

所以疯了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; }
}

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

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

以下作品:

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

以下不起作用:

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

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

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

我已尝试将属性设置器更改为公共,但仍无法解决问题

没有明显的理由行为不端。我显然遗漏了一些东西,但我无法弄清楚是什么。

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

1 个答案:

答案 0 :(得分:3)

问题似乎是由C#6的新https://regex101.com/r/dX7kU7/2功能引起的。

如果您初始化属性&#34;内联&#34;实体框架打破了一对多的关系。

删除初始化程序,导航属性应该再次起作用。

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