何时使用拥有的实体类型与仅创建外键或将列直接添加到 table?
When to use an owned entity types vs just creating a foreign key or adding the columns directly to the table?
我在此处阅读有关拥有的实体类型的信息 https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback,我想知道我何时会使用它。尤其是在使用 .ToTable();
时,尽管我不确定 ToTable 是否与键建立了关系。
我阅读了整篇文章,因此我明白它本质上是强制您通过导航属性访问数据,并防止拥有的 table 被视为一个实体。他们还说不需要 Include()
并且数据会随着对父 table 的每次查询而下降,所以它不像你在减少返回的数据量。
所以重点是什么?另外,"table splitting" 的意义何在?
它取代了复杂类型,可以选择将其设置为 1-1 关系 /w ToTable,同时自动预先加载。这将在两个 table 中使用相同的 PK,与 1-1.
相同
要点 Table-splitting 是您想要一个规范化的对象模型,而 table 结构不是。这适用于您拥有现有 table 结构并希望将该数据的相关部分拆分为与主实体关联的子实体的场景。使用 ToTable 选项,它类似于 1-1 关系,但会自动预先加载。但是,在考虑使用 1-1 关系的原因时,我会认为此选项是一个糟糕的选择。
在正常的一对一关系中使用它的常见原因包括:
- 拆分加载成本高、很少使用的数据。 (图像、二进制文件、备忘录)
- 将特定于单个应用程序的数据封装到一个公共实体之外。即,如果我有一个 "Customer" 被计费系统使用而不是 CRM,我可能有 "CustomerBillingData" 和 "CustomerCRMData" 属于 "Customer" 而不是继承的 BillingCustomer / CRMCustomer。因为有一个 "single" 客户可能服务于一个或两个系统。计费不关心 CRM 数据,CRM 不关心计费。如果所有数据都在 "Customer" 中,那么两个系统都可能需要更新,并且当数据对另一个系统是可选的时,我不能依赖约束。通过使用组合,我可以为特定系统强制执行所需的数据。
在这两种情况下,我都不想使用 table-splitting 或任何自动预加载的东西,所以 Owned Types /w ToTable 不会用任何方式替换 1-1 关系拉紧。它本质上是复杂类型的更严格版本,我想说它严格用于实体组织。不是我承认想要经常使用的东西。
我在此处阅读有关拥有的实体类型的信息 https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback,我想知道我何时会使用它。尤其是在使用 .ToTable();
时,尽管我不确定 ToTable 是否与键建立了关系。
我阅读了整篇文章,因此我明白它本质上是强制您通过导航属性访问数据,并防止拥有的 table 被视为一个实体。他们还说不需要 Include()
并且数据会随着对父 table 的每次查询而下降,所以它不像你在减少返回的数据量。
所以重点是什么?另外,"table splitting" 的意义何在?
它取代了复杂类型,可以选择将其设置为 1-1 关系 /w ToTable,同时自动预先加载。这将在两个 table 中使用相同的 PK,与 1-1.
相同要点 Table-splitting 是您想要一个规范化的对象模型,而 table 结构不是。这适用于您拥有现有 table 结构并希望将该数据的相关部分拆分为与主实体关联的子实体的场景。使用 ToTable 选项,它类似于 1-1 关系,但会自动预先加载。但是,在考虑使用 1-1 关系的原因时,我会认为此选项是一个糟糕的选择。
在正常的一对一关系中使用它的常见原因包括:
- 拆分加载成本高、很少使用的数据。 (图像、二进制文件、备忘录)
- 将特定于单个应用程序的数据封装到一个公共实体之外。即,如果我有一个 "Customer" 被计费系统使用而不是 CRM,我可能有 "CustomerBillingData" 和 "CustomerCRMData" 属于 "Customer" 而不是继承的 BillingCustomer / CRMCustomer。因为有一个 "single" 客户可能服务于一个或两个系统。计费不关心 CRM 数据,CRM 不关心计费。如果所有数据都在 "Customer" 中,那么两个系统都可能需要更新,并且当数据对另一个系统是可选的时,我不能依赖约束。通过使用组合,我可以为特定系统强制执行所需的数据。
在这两种情况下,我都不想使用 table-splitting 或任何自动预加载的东西,所以 Owned Types /w ToTable 不会用任何方式替换 1-1 关系拉紧。它本质上是复杂类型的更严格版本,我想说它严格用于实体组织。不是我承认想要经常使用的东西。