如何在具有双向导航属性的两个实体之间建立多个关系(代码优先)



正如您在下面的代码中看到的,我有两个表,它们之间有一个一对多和一个多对多系。这段代码似乎是错误的,因为我将无法从Person实体导航到Meeting实体。我不懂术语,但我会用英语告诉你。

你知道每个人都参加过很多会议你知道每个人都创建了许多会议你知道每次会议都有很多与会者你知道每个会议都有一个创建者

当我们谈论会议时,您可以使用外键"creator_ID"告诉创建者当我们谈论会议时,您可以使用中间映射表来判断与会者是谁

当我们谈论一个人时,你可以使用中间映射表告诉他参加的会议

但是

当我们谈论一个人来告诉这个人创建的会议时,你应该查看所有会议并检查他们的外键"Creator_ID"

我知道DBMS就是这样工作的。但由于我正在使用实体框架,我希望能够使用

meetings = thisPerson.meetingsCreated;

public class Person
    {
        public int ID {get; set;}
        public string UserName { get; set; }
        public ObservableCollection<Meeting> meetingsAttended { get; set; }
        public ObservableCollection<Meeting> meetingsCreated { get; set; }          
    }
public class Meeting
    {
        public int ID { get; set; }
        string Title { get; set; }
        [ForeignKey("Creatator_ID")]
        public virtual Person createdBy { get; set; }
        public virtual ObservableCollection<Person> Attendees { get; set; }          
    }

我是否应该在Person类中实现一个方法,该方法遍历所有会议并返回此Person创建的会议?我该怎么做?

您应该有一些配置说明,如

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Entity<Meeting>().HasResquired(m => m.CreatedBy).WithMany(p => p.meetingCreated);
    modelBuilder.Entity<Meeting>().HasMany(m => m.Attendees).WithMany(p => p.meetingAttended);
}

最新更新