C# - EF 6 - FK关系(发票类)

时间:2015-03-30 13:59:48

标签: c# entity-framework ef-code-first foreign-keys

我正在设计发票类。说实话:

  • 我正在使用EF 6代码优先使用Fluent-API。
  • 表格(类别):发票,供应商,客户,商店

发票类有发行人和收件人。 我想要'IssuerId'和'AddresseeId'

之类的东西

发行人可以是供应商(用于购买物品)或商店(用于销售/回收物品),收件人可以是供应商(用于退货),顾客(用于销售商品)或商店(购买物品)。

当然我不想为每个人创建FK列,因为每张发票只使用两个,而其他发票则为空。

解释的问题:收件人和发行人可以是每张发票的任何表格。

我想添加一个enum作为鉴别器来告诉EF我的FK指向哪个表:

public int AdresseeId { get; set; }
public AdresseeType AdresseeType { get; set; } // 'C' is customer, 'S' is supplier...

但我也需要工作和导航属性的关系。我正在努力为这种情况找到最干净的解决方案。 任何帮助将非常感激。 感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Table Per Concrete Type继承映射策略。创建一个抽象类Addressee,其中包含任何收件人共有的所有属性,然后让您的CustomerSupplierStore实体从中继承。 Invoice上的集合属性的类型为Addressee。在实体映射配置中,使用MapInheritedProperties()选项。

本文将为您提供更多信息和示例。 http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines