在我的情景中,我有工作,公司和部门。
单一工作可能只有一家公司;公司可能有多个职位(一对多)
单个工作可能有多个部门;部门可能有多个工作(多对多)。
我想仅使用外键设置关系。为此,我有外键和懒惰导航属性的属性。
这些是我的课程:
public class JobEntity
{
[Key]
public int Id
{
get;
set;
}
public Companies CompanyId
{
get;
set;
}
//Navigation
[ForeignKey("CompanyId")]
public virtual CompanyEntity Company
{
get;
set;
}
public IList<Departments> Departments
{
get;
set;
}
//navigation
public virtual IList<DepartmentEntity> DepartmentsNavigation
{
get;
set;
}
}
public class DepartmentEntity
{
public Departments Id
{
get;
set;
}
public string Name
{
get;
set;
}
//navigation
public virtual IList<JobEntity> Jobs
{
get;
set;
}
}
public class CompanyEntity
{
public Companies Id
{
get;
set;
}
public string Name
{
get;
set;
}
//navigation
public virtual List<JobEntity> Jobs
{
get;
set;
}
}
另外,我在上下文中有多对多的映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<JobEntity>()
.HasMany<DepartmentEntity>(s => s.DepartmentsNavigation)
.WithMany(c => c.JobsNavigation)
.Map(cs =>
{
cs.MapLeftKey("JobId");
cs.MapRightKey("DepartmentId");
cs.ToTable("JobsDepartments");
});
}
当我将CompanyId设置为Job时,一切都按预期工作:当我从DB获取Job时,我有一个关联的公司延迟加载。
但是,当我设置相关外键的作业列表时(&#39;部门&#39;) - 当我从DB加载作业时,此列表为空并且部门导航属性(&#39; DepartmentsNavigation&#39;)数量为0(我预计会设置部门ID的集合,我设置了懒惰的部门集合)。
我做错了什么?