EF Core中实体的导航属性

时间:2018-10-04 11:13:26

标签: entity-framework entity-framework-core

请参见示例实体:

Customer
    * Id
    * Name

Product
    * Id
    * Name
    * Price

PurchaseOrder
    * Id
    * CustomerId
    * Customer

PurchaseOrderItem
    * Id
    * PurchaseOrderId
    * PurchaseOrder
    * ProductId
    * Product
    * Quantity
    * Price

如您所见,PurchaseOrder引用Customer,而PurchaseOrderItem引用PurchaseOrderProduct

我的问题是,像CustomerProductPurchaseOrder这样的引用实体是否应具有导航属性?查看修改后的实体:

Customer
    * Id
    * Name
    * PurchaseOrders (list) <----- added

Product
    * Id
    * Name
    * Price
    * PurchaseOrderItems (list) <----- added

PurchaseOrder
    * Id
    * CustomerId
    * Customer
    * PurchaseOrderItems (list) <----- added

对于PurchaseOrder,我确信应该包含导航属性PurchaseOrderItems,因为我认为它们是PurchaseOrder的“组成部分”,但是有关于何时使用的指南包括导航属性?目前Product具有PurchaseOrderItems属性是没有意义的。

我的第二问题是,如果我不包括导航属性,那么我可能会面临哪些影响,特别是在EF Core中?我想到的一件事是手动加入ProductPurchaseOrerItem之类的实体列表,我认为这有点乏味。

第三,即使每次导航属性看起来都没有意义,这是否也是错误的?

如果您由于不清楚的问题或其他任何原因决定关闭此问题,请至少至少首先指导我正确的方向。

1 个答案:

答案 0 :(得分:1)

  

关于何时包括导航属性是否有指南?

对于多对多关系

对于带有外键的实体,始终具有单例导航属性。

通常使用集合导航属性。它们很方便,但是您通常会最终使用它们。引用类型的实体例​​外,可以由多个不相关的实体引用。例如位置,组织,货币等。