实体框架6”;HasRequired”;以及“;WithMany”;部分工作-未按预期工作
本文关键字:工作 WithMany 框架 HasRequired 以及 实体 | 更新日期: 2023-09-27 18:28:18
所以,在疯狂了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; }
}