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);  
}

私には非常に明確に思えますが、hasmanny/hasrequired に対してどのような動きをしても、EF (および sql) は不平を言い続けます。実装しようとしているものの名​​前がわからないため、Google ヘルプを見つけることさえできません (ダブル 1 対 1 ???!!!)

イベントには null でない 2 人の参加者 (1 番目と 2 番目のみ、多くはない) が必要であり、各参加者は多くのイベントを持つことができるという考え方です。

ありがとう

4

1 に答える 1

2

コードには複数の問題があります。

  • PK を null 許容にすることはできません
  • リレーションを Required として定義する場合、FK を null 許容にすることはできません
  • で 2 つのリレーションを定義する場合、2Participantつのナビゲーション プロパティが必要です。2 つのリレーションを 1 つのEventsプロパティにマップすることはできません。
  • CreatedByと の両方Eventでのマッピングが完了していませんParticipant

これを試して:

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);  
}
于 2012-04-27T08:16:25.753 に答える