我正在设计发票类。说实话:
发票类有发行人和收件人。 我想要'IssuerId'和'AddresseeId'
之类的东西发行人可以是供应商(用于购买物品)或商店(用于销售/回收物品),收件人可以是供应商(用于退货),顾客(用于销售商品)或商店(购买物品)。
当然我不想为每个人创建FK列,因为每张发票只使用两个,而其他发票则为空。
解释的问题:收件人和发行人可以是每张发票的任何表格。
我想添加一个enum作为鉴别器来告诉EF我的FK指向哪个表:
public int AdresseeId { get; set; }
public AdresseeType AdresseeType { get; set; } // 'C' is customer, 'S' is supplier...
但我也需要工作和导航属性的关系。我正在努力为这种情况找到最干净的解决方案。 任何帮助将非常感激。 感谢。
答案 0 :(得分:1)
您可以使用Table Per Concrete Type继承映射策略。创建一个抽象类Addressee
,其中包含任何收件人共有的所有属性,然后让您的Customer
,Supplier
和Store
实体从中继承。 Invoice
上的集合属性的类型为Addressee
。在实体映射配置中,使用MapInheritedProperties()
选项。