2015-06-22 2 views
0

В моем сценарии у меня есть вакансии, компании и отделы.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 (ожидается, есть коллекция идентификаторов отделов, которые я установил + ленивый загруженный набор отделов).

Что я делаю неправильно?

ответ

0

Для многих-ко-многим вы не можете использовать ассоциацию внешних ключей.

Там есть ссылка на этот here:

один-к-одному отношение в EFv4 всегда использует внешних ключей объединения и многие-ко-многим всегда использует Независимую ассоциацию.

и here:

Примечание: Во многих ко многим (*: *) вы не можете добавить внешние ключи к субъектам. В отношении *: * информация об ассоциации управляется независимым объектом.

и here:

Однако, если у вас есть чистый многие-ко-многим, что связано с помощью присоединения таблицы, содержащей только внешние ключи, то EF будет использовать независимую ассоциацию для управления такие отношения многие-ко-многим.

Ваши внешние ключи уже в JobsDepartments таблице, поэтому EF не позволит вам добавить дополнительные внешние ключи для этих отношений в JobEntity и DepartmentEntity лиц.

Смежные вопросы