2015-03-20 2 views
0

Я знаю, что есть связанная с этим тема: two Foreign Keys from same table, но я не могу найти там исправление моей проблемы. Я довольно новичок в EF.Entity Framework: два внешних ключа, соединенных одной коллекцией

У меня есть следующие классы модели (Code-First):

public class Member 
{ 
    [Key] 
    public int MemberID { get; set; } 
    public string Name {get; set;} 
    public string Surname { get; set; } 

    public virtual ICollection<Marriage> Marriages { get; set; } 
} 

public class Marriage 
{ 
    [Key] 
    public int MarriageID { get; set; } 
    public string MarriagePlace { get; set; } 
    public DateTime MarriageDate { get; set; } 

    [ForeignKey("Husband")] 
    public int HusbandID { get; set; } 
    [ForeignKey("Wife")] 
    public int WifeID { get; set; } 

    public virtual Member Husband { get; set; } 
    public virtual Member Wife { get; set; } 
} 

Моя проблема заключается в том, что муж и жена должны быть подключены к одной и той же коллекции Брака в классе членов. Я сделал это:

modelBuilder.Entity<Marriage>() 
     .HasRequired<Member>(m => m.Husband) 
     .WithMany(m => m.Marriages) 
     .HasForeignKey(m => m.HusbandID) 
     .WillCascadeOnDelete(false); 

И теперь муж подключен к коллекции Merriages. Но все ломается, когда я пытаюсь добавить то же самое для жены собственности:

modelBuilder.Entity<Marriage>() 
     .HasRequired<Member>(m => m.Wife) 
     .WithMany(m => m.Marriages) 
     .HasForeignKey(m => m.WifeID) 
     .WillCascadeOnDelete(false); 

и я получаю сообщение об ошибке:

Error 1 Schema specified is not valid. Errors: The relationship 'FamilyTree.Models.Marriage_Husband' was not loaded because the type 'FamilyTree.Models.Member' is not available. C:\Users\Sumiteru\Documents\Visual Studio 2013\Projects\FamilyTree\FamilyTree\App.xaml 9 21 FamilyTree

ответ

1

Эта ошибка происходит becouse EF не знал, что свойство навигации он должен использовать. В методе OnModelBuliding вы устанавливаете внешний ключ Member's в Marriages дважды, поэтому EF путается о том, какое свойство навигации следует использовать, когда оно заполняет Marriages и генерирует исключение.

Есть тема на форуме EF codeplex, где пользователь с именем 'moozzyk' объясняет, что поведение EF более четко (в комментарии): Link.

В качестве решения вы должны сделать другое навигационное свойство коллекции в классе Member и указать карту Wife или Husbend. Вы можете найти то же решение на этом SO anwser: Link.

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