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

时间:2014-09-18 12:02:20

标签: entity-framework mapping

正如您在下面的代码中看到的,我有两个表,其中一个一对多和一个多对多关系。此代码似乎有误,因为我无法从Person实体导航到Meeting实体。我不懂行话,但我会用英语告诉你。

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

当我们谈论会议时,您可以使用外键告诉创建者" Creator_ID" 当我们谈论会议时,您可以使用中间映射表

来确定与会者是谁

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

但是

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

我知道这是DBMS的工作原理。但由于我正在使用Entity Framework,我希望能够使用

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创建的会议的方法吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

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

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

}