根据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/
您可以在此处首先找到代码为的TPH(每个层次的表)
您可以删除ComponentType
属性,EF将自动创建一个带有Discriminator
列的Component
表,该列用于区分(duh)子类。
如果您需要鉴别器列的特定列名和/或数据类型,您可以直接或通过EntityTypeConfiguration
覆盖DbContext
的OnModelCreating
事件中的默认值,例如通过执行
Map(m => m.Requires("ComponentType").HasValue(1);
对于每个子类型。(显然,HasValue
每次都有不同的值)。
您将在上下文中创建属性DbSet<Component>
。这将返回所有组件,而与类型无关。如果你只想ComponentA
做
context.Components.OfType<ComponentA>(). ...
哦,Component
应该是一个抽象类。