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个非空参与者(仅限第一个和第二个,不是很多)并且每个参与者可能有许多事件
由于
答案 0 :(得分:2)
您的代码中存在多个问题:
Participant
定义两个关系时,您需要两个导航属性 - 您无法将两个关系映射到单个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);
}