实体框架-映射多对多关系

问题描述

| 我在努力将这两个表映射在一起,在
Name
表上的列
TitleID
映射到
Title
表上的
TitleID
。表的主键是
NaMetableID
/
TitleTableID
,并且是唯一的,
NameID
TitleID
(在两个表上)不是唯一的,当前记录在
DateEnd
列中为空。
public class Name
{
    public int NaMetableID { get; set; }
    public int NameID { get; set; }
    public int TitleID { get; set; }    // Maps to Title.TitleID
    public virtual Title Title { get; set; }
    public string Givenname { get; set; }
    public string FamilyName { get; set; }
    public DateTime DateStart { get; set; }
    public DateTime? DateEnd { get; set; }
}
public class Title
{
    public int TitleTableID { get; set; }
    public int TitleID { get; set; }    // Maps to Name.TitleID
    public string Description { get; set; }
    public DateTime DateStart { get; set; }
    public DateTime? DateEnd { get; set; }
}
我假设需要在我的DB Context类中向
OnModelCreating
添加一些代码,但是在映射/代码方面苦苦挣扎,有什么想法吗? 谢谢, 马丁     

解决方法

        这根本不是关系。您不能在两个任意列上建立关系。您应该阅读一些有关数据库关系如何工作以及建立关系的要求的介绍。 在多对多中,您必须在两端选择唯一的密钥,并且必须有将建立相关密钥对的联结表。 EF不支持唯一键,因此构建多对多关系的唯一方法是在主键之上:如果要多对多关系,则必须在
Title.TitleTableID
Name.NameTableID
上建立它。