代码之家  ›  专栏  ›  技术社区  ›  Victorio Berra

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

  •  1
  • Victorio Berra  · 技术社区  · 7 年前

    我在这里读到关于拥有实体类型的文章 https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback 我想知道我什么时候会用这个。尤其是在使用 .ToTable(); 尽管我不确定totable是否与keys建立了关系。

    我阅读了整篇文章,因此我理解它实际上迫使您通过nav属性访问数据,并防止所拥有的表被视为一个实体。他们还说 Include() 不需要,并且数据随父表的每个查询而下降,因此这不像是减少返回的数据量。

    那到底是什么意思?“分桌”还有什么意义?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Steve Py    7 年前

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

    点表拆分是希望对象模型是规范化的,而表结构不是规范化的。如果您有一个现有的表结构,并且希望将该数据的相关部分拆分为与主实体相关联的子实体,那么这将适合这样的场景。使用totable选项,它将类似于1-1关系,但会自动加载。然而,当考虑到使用1-1关系的原因时,我会认为这是一个糟糕的选择。

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

    • 剥离昂贵的加载,很少使用的数据。(图像,二进制,备注)
    • 从公共实体封装特定于单个应用程序的数据。也就是说,如果我有一个“客户”,它被一个计费系统和一个CRM所使用,那么我可能拥有“客户”拥有的“CustomerBillingData”和“CustomerCrmData”,而不是一个继承的计费客户/CRMCustomer。因为有一个“单一”客户可以为一个或两个系统服务。计费不关心CRM数据,CRM不关心计费。如果所有数据都在“customer”中,那么两个系统都可能需要更新,并且当数据对另一个系统是可选的时,我不能依赖约束。通过使用composition,我可以为特定的系统强制执行所需的数据。

    在这两种情况下,我都不想使用表拆分或任何自动请求加载的功能,因此owned types/w to table不会用任何扩展替换1-1关系。它本质上是复杂类型的一个更严格的版本,我认为它严格用于实体组织。我不会承认经常使用的东西。