2

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

我阅读了整篇文章,所以我明白它本质上是强迫您通过导航属性访问数据并防止拥有的表被视为实体。他们还说Include()不需要,并且每次查询父表时数据都会下降,因此您不会减少返回的数据量。

那么究竟有什么意义呢?“表拆分”还有什么意义?

4

1 回答 1

2

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

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

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

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

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

于 2018-05-30T22:08:54.087 回答