entity-framework - Entity Framework 继承 : TPT, TPH 还是没有?

标签 entity-framework inheritance

我目前正在阅读有关在 Entity Framework 中使用继承的可能性。有时我使用方法来输入数据记录,但我不确定我是否会使用 TPT 或 TPH 或不使用...

例如...
我有一家电子商务商店,可以添加送货、帐单和送货地址

我有一个地址表:

RecordID
AddressTypeID
Street
ZipCode
City
Country

和一张 table AddressType
RecordID
AddressTypeDescription

当人们炫耀TPT或TPH时, table 设计与一般设计不同......
当有这样的方法时,考虑继承是否有意义..

我希望这是有道理的...

谢谢你的帮助...

最佳答案

在考虑如何在数据库中表示继承时,您需要考虑一些事情。

如果您有许多不同的子类,则在涉及那些可能损害性能的更复杂类型的查询中可能会有很多额外的连接。 TPH 的一大优势是您可以查询一个表中的所有类型的层次结构,这对性能来说是一个福音,尤其是对于较大的层次结构。出于这个原因,我倾向于在大多数情况下支持这种方法

但是,TPH 意味着您不能再拥有 NOT NULL子类型的字段,因为所有类型的所有字段都在一个表中,将数据完整性的责任推给您的应用程序。虽然这在实践中听起来很可怕,但我还没有发现这是一个太大的限制。

但是,如果每种类型都有很多字段,并且层次结构中的类型数量可能很少,则我倾向于使用 TPT,这意味着性能对连接来说不是什么大问题,并且您会变得更好数据的完整性。

请注意,EF 和其他 ORM 的优势之一是您可以在不影响应用程序的情况下改变主意,因此不需要完全一成不变的决定。

在您的示例中,它似乎没有继承关系,从地址类型到地址看起来像是一对多

这将在您的类之间表示如下:

Address.AddressType
AddressType.Addresses

关于entity-framework - Entity Framework 继承 : TPT, TPH 还是没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/929938/

相关文章:

asp.net - Windows 2012 SERVER - 未找到具有不变名称 'System.Data.SqlClient' 的 ADO.NET 提供程序的 Entity Framework 提供程序

entity-framework - Entity Framework 合并选项不跟踪不良性能

c++ - 这两个类是否违反封装?

Java 继承和构造函数参数

java - java.sql.Timestamp 的 javadoc 中的实现继承是什么意思?

c# - 如何首先在 Entity Framework 代码中为每种类型配置多个对象集

entity-framework - 如何首先从EF5.0模型更新数据库架构?

entity-framework - Entity Framework ObjectContext 是否正确实现了工作单元模式?

c++ - 虚拟继承 : Base Ctor not calling in Most Derived Class?

java - 扩展 Log4JLogger 并在运行时调用子类