我已经阅读了Entity Framework One-To-One Mapping Issues,但由于业务规则的不同,这不是重复内容。
有两个表,Invoices和Orders。
Invoices
-> InvoiceID (Primary, Auto Number)
Orders
-> OrderID (Primary, Auto Number)
-> InvoiceID (FK InvoiceID of Invoices Table)
现在的问题是,如果属性名不同,EF要求这个关联必须是一对多的关系。如果属性名相同,则可以作为派生类的目的,但是这里订单并不是派生类或发票。
每个购物车都会生成发票ID,但只有已支付的发票才会生成订单ID,所以每个订单都有发票ID,但不是每个订单都有相应的发票。
如果我为此创建一个单独的表,那么我就必须编写太多代码来完成它。是否有任何方法可以移除此限制,并让EF仍然处理我的模型。
然而,如果我按照以下方式更改模型,它就可以工作。
Invoices
-> InvoiceID (Primary, Auto Number)
Orders
-> OrderID (Auto Number)
-> InvoiceID (Primary, FK InvoiceID of Invoices Table)
但这是好的实践吗?因为按定义,订单表的InvoiceID肯定是唯一的,但我们将到处引用OrderID进行比较和许多其他引用。我知道我可以对属性建立索引,但我觉得这个设计并不完美。