Table-per-Type Code First - 如何区分基类型是子类型
Table-per-Type Code First - How to differentiate if Base type is sub type
我确定我的问题源于对 Base type/Sub 类型实体的确切关联方式的误解,但请耐心等待。
假设我有两个 类:
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 相关联。我宁愿这样做而不进行查询以确定密钥是否存在于每个 table.
据我所知,这是不可能的 - 因此我的问题;
有没有办法使用对数据库的最少查询来实现此目的?
我将尝试通过示例扩展@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 执行任何额外的查询。
我确定我的问题源于对 Base type/Sub 类型实体的确切关联方式的误解,但请耐心等待。
假设我有两个 类:
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 相关联。我宁愿这样做而不进行查询以确定密钥是否存在于每个 table.
据我所知,这是不可能的 - 因此我的问题;
有没有办法使用对数据库的最少查询来实现此目的?
我将尝试通过示例扩展@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 执行任何额外的查询。