我正在使用 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/