帮助EF Code First,多对多的关系

时间:2011-06-07 23:45:40

标签: entity-framework mapping entity-framework-4.1 ef-code-first

人与EHR(电子健康记录)是一对一相关的。 人有EHRId可以为空,EHR有PersonId不可为空。

同时EHR和Person必须是多对多的。 因为一个人可以有许多医务人员(由人实体代表),而医生可以拥有许多EHR。 我想在连接表上有额外的属性。

我不知道如何在EF中定义它。

请帮忙。

这是我的课程。

    public class Person
        {
            public int ID { get; set; }            
            public string firstName { get; set; }            
            public string lastName { get; set; }            
            public ICollection<UserSpecialist> patients { get; set; }
            public int ehrID { get; set; }
            public virtual EHR ehr { get; set; }

        }

public class EHR
    {
        public int ID { get; set; }
        public bool asthmatic{ get; set; }
        public ICollection<UserSpecialist> specialists { get; set; }
        public int PersonID { get; set; }
        public virtual Person Person { get; set; }
    }

public class UserSpecialist
    {
        public int ID { get; set; }
        public DateTime creationDate { get; set; }
        public int PersonID { get; set; }
        public int EHRID { get; set; }
        public virtual Person Person { get; set; }
        public virtual EHR EHR { get; set; }
    }

当EF尝试创建数据库时会抛出此错误

  

无法确定主要目标   类型之间的关联   'Project.Person'和'Project.EHR'。   这个协会的主要目的   必须使用明确配置   无论是关系流畅的API还是   数据注释。

请帮忙

1 个答案:

答案 0 :(得分:2)

PersonEHR并非一对一相关,也不能在EF中。您定义的是双向一对多。您还根据需要声明了两个关系,因为FK不可为空。

只有当EHR的PK(Id)也是FK到Person时,才能在EF中定义真正的一对一。一旦你定义了这个与多对多的部分变得非常奇怪,因为人将与其他人的EHR相关。您的域名描述很可能不正确。