0
class Event{ 
    int? EventID{get;set;} 
    int? FirstParticipantID{get;set;} 
    Participant FirstParticipant{get;set;} 
    int? SecondParticipantID{get;set;} 
    Participant SecondParticipant{get;set;} 
    int? CreatedByID{get;set;} 
    User CreatedBy{get;set;} 
} 


class Participant{ 
    int? ParticipantID{get;set;} 
    List<Event> Events{get;set;} 
    int? CreatedByID{get;set;} 
    User CreatedBy{get;set;} 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder){ 
    modelBuilder.Entity<Event>().HasRequired(m => m.FirstParticipant).WithMany(m => m.Events).HasForeignKey(m => m.FirstParticipantID); 
    modelBuilder.Entity<Event>().HasRequired(m => m.SecondParticipant).WithMany(m => m.Events).HasForeignKey(m => m.SecondParticipantID); 
    modelBuilder.Entity<Event>().HasRequired(m => m.CreatedBy); 
    modelBuilder.Entity<Participant>().HasRequired(m => m.CreatedBy); 
} 

在我看來很清楚,但EF(和SQL)不斷抱怨,無論什麼動作我做的hasmanny/hasrequired東西。我什至不能找到谷歌的幫助,因爲我不知道我想要實現的名稱(雙一對一??? !!!)實體框架代碼第一個雙一對一的關係

這個想法是,一個事件必須有2空參與者(僅第一&第二,不是很多),並且每個參與者可能有許多活動

感謝

回答

2

有你的代碼中的多個問題:

  • PK不能爲空的
  • FK不能你不能兩個關係映射到單一Events財產
  • 你沒有完成在這兩個您的CreatedBy映射 - 如果要定義關係的要求
  • 當你定義兩個關係與Participant需要兩個導航性能可爲空EventParticipant

試試這個:

public class Event{ 
    public int EventID {get;set;} 
    public int FirstParticipantID{get;set;} 
    public Participant FirstParticipant{get;set;} 
    public int SecondParticipantID{get;set;} 
    public Participant SecondParticipant{get;set;} 
    public int CreatedByID{get;set;} 
    public User CreatedBy{get;set;} 
} 


public class Participant{ 
    public int ParticipantID {get;set;} 
    public int CreatedByID {get;set;} 
    public User CreatedBy {get;set;} 
    public ICollection<Event> FristEvents { get; set; } 
    public ICollection<Event> SecondEvents { get; set; } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder){ 
    modelBuilder.Entity<Event>() 
       .HasRequired(m => m.FirstParticipant) 
       .WithMany(m => m.FirstEvents) 
       .HasForeignKey(m => m.FirstParticipantID); 
    modelBuilder.Entity<Event>() 
       .HasRequired(m => m.SecondParticipant) 
       .WithMany(m => m.SecondEvents) 
       .HasForeignKey(m => m.SecondParticipantID); 
    modelBuilder.Entity<Event>() 
       .HasRequired(m => m.CreatedBy) 
       .WithMany() 
       .HasForeignKey(m => m.CreatedByID); 
    modelBuilder.Entity<Participant>() 
       .HasRequired(m => m.CreatedBy) 
       .WithMany() 
       .HasForeignKey(m => m.CreatedByID); 
} 
+0

感謝@拉吉斯拉夫 - mrnka我是從我的工作的賬號回答,所以我不能檢查溶膠(這是我的家庭項目),但我有以下問題:1)Participant.Events現在是Participant.FirstEvents + Participant.SecondEvents ???這會在數據庫中創建額外的字段(或表)? 2)我做屬性可爲空因爲我寧願檢查空值而不是默認值...我應該放棄這個想法嗎?你怎麼處理它? 3)你怎麼稱呼這種關係? – 2012-04-27 16:37:39

+0

1)是的,你的Events集合被分成兩個集合。它不會創建任何額外的DB結構。 2)Null具有您的模型不允許的特殊含義。你不能使用它。 3)這是聯結表(Event)包含附加數據的多對多關係的更復雜版本。 – 2012-04-27 18:20:26

+0

Hi @ Ladislav-Mrnka感謝您的回覆。我終於有時間來實現它,但它不起作用。我刪除了所有空值,將事件拆分爲First&Second,並完成了用戶外鍵,但仍然拋出:引入表'Event'上的FOREIGN KEY約束'FK_Event_Participant_SecondParticipantID'可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。無法創建約束。你認爲我錯過了什麼? – 2012-04-30 02:32:44

相關問題