2012-04-04 32 views
1
一些属性值的基础上,两个表中的一个表

假设我有一个基类组件和两个派生类ComponentA和以componentB,类似如下:选择在MVC3和EF

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 ... 
} 

现在,基于组件类中COmponentType的值,如何切换到ComponentA或ComponentB并检索其相关数据。

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

回答

0

可以发现TPH(每层次结构表)与代码第一here

0

可以删除ComponentType属性和EF将自动创建Component表与用于区分(杜)一个Discriminator列之间子类。

如果你需要一个特定的列名和/或数据类型鉴别列,您可以覆盖默认值在OnModelCreating事件您DbContext的,无论是直接或通过EntityTypeConfiguration例如通过做

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

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

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

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

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