c#-4.0 - 使用 Entity Framework 根据数据库行中的单元格映射到子类 POCO 对象

标签 c#-4.0 entity-framework-4 abstract-class poco

我正在使用 Entity Framework 和 C# POCO 对象。我有一些对象仅在行为上有所不同;它们在数据库中相关的数据行是相同的。数据库中有一行定义包含该行为的类。

我真的很想使用抽象类来实现常见行为,然后根据数据库中的该行实例化 Entity Framework 中的子类。这个例子不是我正在研究的,但我认为它是类似的。如果这是处理文档的错误方法,那是因为这只是一个类比,我对文档管理一无所知:)

例如,给定“文档”表中的这两行(带标题行):

DocumentId  Description         DocumentType
314     A word processing document  WordProcessingDocument
315     A spreadsheet           SpreadsheetDocument

理想情况下,我最终会得到一个 Document.WordProcessingDocument 和一个 Document.SpreadsheetDocument,它们具有抽象 Document 类中描述的常见行为。 Entity Framework 仍将管理这些对象及其与其他对象的关系。

这可以做到吗?或者 Entity Framework 只能为每个表实例化一个类吗?为每个子类型创建一个新表是没有意义的,因为这些表中没有数据。这些子类仅在行为上有所不同,而在数据上没有差异。

最佳答案

这称为Table per Hiearchy (或 TPH)并且在 EF 中是可能的。您必须将基类建模为实体,并将具体类建模为从基类派生的实体。您需要一个名为 Discriminator 的特殊列(在您的示例中可能是 DocumentType),它不映射为数据,但定义从数据库加载行时应具体化哪个子类。

关于c#-4.0 - 使用 Entity Framework 根据数据库行中的单元格映射到子类 POCO 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752134/

相关文章:

c# - 如何在给定负载下运行 CPU(CPU 利用率百分比)?

c# - 如何在多个实体数据模型之间共享连接字符串

c# - 刷新后重新抛出 Entity Framework OptimisticConcurrencyException

sql-server - 具有 LEFT OUTER JOIN 的 SQL Server 2008 View 在 Entity Framework 4 上失败

c#-4.0 - HTML Agility pack + 通过内部文本选择节点

visual-studio-2010 - 打开 WCF 托管的 svc 文件

entity-framework-4 - 更新部分主键 Entity Framework 4.0

python - 在Python中创建一个抽象类

c# - Visual Studio 设计器中的抽象 UserControl 继承

java - 接口(interface)和工厂模式的问题