【问题标题】:Entity Framework Code First "join table"实体框架代码优先“连接表”
【发布时间】:2016-01-09 21:15:36
【问题描述】:

我首先使用实体​​框架代码。

我有一个名为 Notes 的实体

我还有其他实体,例如 商业合作伙伴 机会 工单

所有这些实体都可能有注释。

什么是最好的建模方法

1.) 在注释表中具有业务伙伴、机会和工作订单的可选外键。然后只需设置与笔记相关的可选键

2.) 有BusinessPartnerNotes等中间表,有两个字段BusinessPartnerId和NoteId

应该提到的是,一个笔记永远不会同时与两个实体相关。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 与实体相关的多个笔记怎么样?
  • 为什么不在业务合作伙伴、机会和工作订单中为 Notes 设置外键?
  • 是的,例如业务伙伴可能有很多笔记
  • “为什么不在业务合作伙伴、机会和工作订单中为 Notes 设置外键?” 这将只允许每个实体一个注释
  • 我想问题是这是一对多的关系,但是“一”方可能是业务伙伴、机会或工作订单。我的#2 基本上会在数据库端建模为多对多,但在实体框架中建模为一对多。选项 #1 在 EF 和 DB 中将是一对多一致的,但是在 notes 表中将需要多个“可选”FK

标签: c# entity-framework ef-code-first entity-framework-6 entity-framework-migrations


【解决方案1】:

鉴于您对基数的描述,并假设业务合作伙伴备注具有与机会备注相同的格式,我将采用最简单的方法(选项 1. 在您的列表中)。

class Note
{
    public int Id { get; set; }
    public string Content { get; set; }
}
class BusinessPartner
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Note> Notes { get; set; }
}
class Opportunity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Note> Notes { get; set; }
}

应该生成以下表格:

Notes
  Id
  Content
  BusinessPartner_Id
  Opportunity_Id
BusinessPartners
  Id
  Name
Opportunities
  Id
  Name

【讨论】:

  • 我也是这么想的。好吧,再来一个。这目前是一个生产应用程序,数据库有中间表。如何使用中间表对一对多关系进行建模?我只是将上述类与 modelbuilder.hasMany.Withmany... 一起使用吗?
猜你喜欢
  • 2015-04-09
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多