【问题标题】:Entity Framework - Mapping Many to Many Relationships实体框架 - 映射多对多关系
【发布时间】:2011-06-12 17:59:33
【问题描述】:

我正在努力研究如何将这两个表映射在一起,Name 表上的 TitleID 列映射到 Title 表上的 TitleID。表主键是NameTableID/TitleTableID,并且是唯一的,NameIDTitleID(在两个表上)不是唯一的,当前记录在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 多对多”——你也会得到很多好的答案。或查看this blog post here 了解更多信息
  • 是的,这个问题已经回答了很多次了,但只针对主键。我继承的数据库没有使用主要的关系。

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


【解决方案1】:

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

在多对多中,您必须在两端选择唯一键,并且必须有联结表来构建相关键对。 EF 不支持唯一键,因此构建多对多关系的唯一方法是在主键之上:如果您想要多对多关系,则必须在 Title.TitleTableIDName.NameTableID 上构建它。

【讨论】:

  • 很遗憾我继承的设计不同,看来我可能需要先重构数据库,感谢您的帮助。
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-28
相关资源
最近更新 更多