Table-per-Type Code First - 如何区分Base类型是否为子类型

时间:2015-09-19 15:31:08

标签: c# entity-framework ef-code-first superclass

我确信我的问题来自对基本类型/子类型实体的确切关系的误解,但请耐心等待。

说我有两个班级:

public class Business
{
    public int UniqueID { get; set; }
    public string Name { get; set; }
}

public class BusinessType1 : Business
{
    public string SomeRelatedThing { get; set; }
}

public class BusinessType2 : Business
{
    public string SomeNotRelatedThing { get; set; }
}

在我的应用程序中,我大部分时间都在使用基本类型。但有些页面与Sub类型相关,但需要足够多才能处理(DNRY)。

页面仅在上下文中被赋予基本类型,并且必须从BusinessType1或BusinessType2加载数据。

我面临的问题是我需要确定基本类型(Business)是与BusinessType1还是BusinessType2链接。我更愿意这样做而不进行查询以确定每个表中是否存在密钥。

据我所见,这是不可能的 - 因此我的问题;

有没有办法使用对数据库的最小查询来实现这一目标?

1 个答案:

答案 0 :(得分:1)

我尝试用示例来扩展@Hopeless。

获取所有实体,然后确定基本类型:

var entities = context.Business.ToList();
foreach(var baseEntity in entities)
{
    // some common logic for base entity type

    if (baseEntity is BusinessType1)
    {
        var concreteEntity = (BusinessType1)baseEntity;
        // some logic for entity of BusinessType1
    }
}

仅使用具体类型获取实体:

var concreteEntities = context.Business.OfType<BusinessType1>().ToList();
// some logic for entities of BusinessType1

如您所见,您不需要使用Entity Framework执行任何其他查询。