1

假设我有一个基类 Component 和两个派生类 ComponentA 和 ComponentB,如下所示:

public class Component
{
   public int ComponentID {get; set;}
   public int ComponentType {get; set;}
   // some other statements ...
}

接着

public class ComponentA : Component
{
   // some statements ...
}

public class ComponentB : Component
{
   // some statements ...
}

现在,根据类Component中的COMponentType的值,如何切换到ComponentA或ComponentB并取回它们的相关数据。

这是如何在 edmx 中执行此操作的示例之一,但我想知道是否有任何方法可以在 EF 的 Code First 方法中执行相同的操作。http://www.c-sharpcorner.com/UploadFile/ff2f08/entity-framework-4-0-tph-part-2/

4

2 回答 2

0

您可以删除该ComponentType属性,EF 将自动创建一个Component表,其中包含Discriminator用于区分 (duh) 子类的列。

OnModelCreating如果您需要鉴别器列的特定列名和/或数据类型,您可以DbContext直接覆盖默认值,或者通过EntityTypeConfiguration例如通过执行

Map(m => m.Requires("ComponentType").HasValue(1);

对于每个子类型。(HasValue显然,每次都有不同的值)。

您将DbSet<Component>在上下文中创建一个属性。这将返回所有组件,无论类型如何。如果你只想ComponentA

context.Components.OfType<ComponentA>(). ...

哦,Component应该是一个抽象类。

于 2012-04-05T19:56:23.940 回答
0

您可以先在此处找到带有代码的 TPH(每个层次结构的表)

于 2012-04-04T08:02:39.313 回答