根据MVC3和EF中的某些属性值,在两个表中选择一个表

本文关键字:一个 选择 两个 EF MVC3 属性 根据 | 更新日期: 2023-09-27 18:29:51

假设我有一个基类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中的代码优先方法中是否有同样的方法。http://www.c-sharpcorner.com/UploadFile/ff2f08/entity-framework-4-0-tph-part-2/

根据MVC3和EF中的某些属性值,在两个表中选择一个表

您可以在此处首先找到代码为的TPH(每个层次的表)

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

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

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

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

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

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

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