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

时间:2011-06-12 07:54:00

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

我正在努力解决如何将这两个表映射到一起的问题,TitleID表上的列Name映射到TitleID表上的Title。表主键为NameTableID / TitleTableID并且是唯一的,NameIDTitleID(在两个表上)都不是唯一的,当前记录在null中找到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; }
}

我假设我需要在我的数据库上下文类中向OnModelCreating添加一些代码,但我正在努力解决映射/代码,任何想法?

谢谢, 马丁

1 个答案:

答案 0 :(得分:1)

这根本不是关系。您无法在两个任意列上建立关系。您应该阅读一些关于数据库关系如何工作以及构建关系的要求的介绍。

在多对多中你必须在两端选择唯一的密钥,并且必须有一个联结表,它将构建成对的相关密钥。 EF不支持唯一键,因此构建多对多关系的唯一方法是在主键之上:如果您想要多对多关系,则必须在Title.TitleTableID和{{1}上构建它}}