В моем сценарии у меня есть вакансии, компании и отделы.EF: настройка многих отношений (код сперва)
Одиночная работа может иметь только одну компанию; Компания может иметь несколько вакансий (один-ко-многим)
Отдельная работа может иметь несколько отделений; У отдела может быть несколько вакансий (много-ко-многим).
Я хочу установить отношения только с использованием внешних ключей. Для этого у меня есть свойство Foreign Key и ленивое навигационное свойство.
Это мои классы:
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 в Иов, все работы, как и ожидалось: когда Я получаю работу от БД, у меня есть связанная с ней компания, ленивая.
Однако, когда я устанавливаю в список заданий связанных внешних ключей («Отделы») - при загрузке задания из БД этот список имеет значение null и свойство навигации департаментов («Отделы Навигации»), имеющее счет 0 (ожидается, есть коллекция идентификаторов отделов, которые я установил + ленивый загруженный набор отделов).
Что я делаю неправильно?