![]() |
1
1
我认为您在问,“对于每个层次结构继承的表,我不能使用相关实体作为鉴别器字段,这是真的吗?”这是正确的。您需要一个单独的鉴别器字段来使用每个层次结构继承的表。但是,您可能不需要
然而,我会质疑继承是否是这里的正确设计。 在O/R映射中使用继承总是有点折衷的,因为您要么使用一个类似于设计的每层次表(table-per-hierarchy),它不能自然地映射到一个格式良好的关系模式,要么使用类似于设计的每类型表(table-per-type),这意味着DB服务器必须更加努力地提供一个简单的列表。我认为通用设计指南 Favor composition over inheritance “对于O/R映射,尤其是对于ood,更是如此。 我知道您添加的图片只是一些例子来说明您的问题,您的实际设计可能更复杂,但让我们以它为例:
图中的子类型(
除了您在插图中展示的继承设计之外,您还可以在不使用继承的情况下为该设计建模。在这种情况下,您将删除子类型,但保留
现在,让我们考虑一些示例查询在每个设计中的外观:
两个人对我都没有那么严重的打击。对我来说,这是不使用继承的理由。O/R映射中继承的最引人注目的优点是能够在单个列表中轻松地检索不同子类型的实体。但是你已经可以用这个设计来做了。因为组合设计更容易实现,也不那么复杂,并且可以更高效地使用数据库,所以我更喜欢它,除非继承有一个引人注目的优势,我在这里没有看到这一点。 |
![]() |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
![]() |
Murat Güzel · EF存储库模式错误{'Id'}已被跟踪 3 年前 |
![]() |
dotnetdevcsharp · 减少基于数据类型获取设置的方法数量 3 年前 |
![]() |
saravanan049 · 在实体框架中回滚Azure SQL数据库 3 年前 |