何时使用拥有的实体类型与仅创建外键或直接将列添加到表中?

时间:2018-05-30 20:18:35

标签: entity-framework asp.net-core asp.net-core-2.1 entity-framework-core-2.1

我在这里阅读有关拥有的实体类型https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback,我想知道何时会使用它。特别是在使用.ToTable();时虽然我不确定ToTable是否与键创建了关系。

我阅读了整篇文章,因此我理解它实际上会强制您通过导航属性访问数据,并防止将拥有的表视为实体。他们还说不需要Include(),并且数据随着父表的每个查询而下降,因此它不像你减少了返回的数据量。

那么究竟是什么意思呢?还有什么是"表分裂"?

1 个答案:

答案 0 :(得分:1)

它取代了复杂类型,可以选择将其设置为1-1关系/ w ToTable,同时自动加载。这将在两个表中使用相同的PK,与1-1相同。

点表拆分将是您想要一个规范化的对象模型,而表格结构则不是。这适用于您具有现有表结构并希望将该数据的相关部分拆分为与主实体关联的子实体的情况。使用ToTable选项,它将类似于1-1关系,但会自动加载。然而,当考虑使用1-1关系的原因时,我会认为这个选项是一个糟糕的选择。

在正常的1-1关系中使用它的常见原因包括:

  • 拆分昂贵的装载,很少使用的数据。 (图像,二进制,备忘录)
  • 将特定数据的数据封装在公共实体之外。即如果我有一个“客户”,它由计费系统和CRM使用,我可能拥有“CustomerBillingData”和“CustomerCRMData”,而不是继承的BillingCustomer / CRMCustomer。因为有一个“单一”客户可以服务于一个或两个系统。账单不关心CRM数据,CRM不关心账单。如果所有数据都在“客户”中,则可能需要更新两个系统,并且当数据对于另一个系统是可选的时,我不能依赖约束。通过使用组合,我可以为特定系统强制执行所需的数据。

在这两种情况下,我都不想使用表拆分或任何自动加载的东西,因此Owned Types / w ToTable不会在任何范围内替换1-1关系。它本质上是复杂类型的更严格版本,我认为它严格用于实体组织。不是我承认想要经常使用的东西。