C# 先按类型代码列出表-如何区分基本类型是否为子类型
我确信我的问题源于对基本类型/子类型实体之间的关系的误解,但请容忍我 假设我有两门课:C# 先按类型代码列出表-如何区分基本类型是否为子类型,c#,entity-framework,ef-code-first,superclass,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
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; }
}
在我的应用程序中,我大部分使用基类型。但是,有些页面与子类型相关,但需要具有足够的通用性来处理这两种类型(DNRY)
该页面仅在上下文中提供了基类型,并且必须从BusinessType1或BusinessType2加载数据
我面临的问题是,我需要确定基本类型(业务)是否与BusinessType1或BusinessType2链接。我更愿意这样做,而不必通过查询来确定每个表中是否存在键
据我所知,这是不可能的——因此我的问题是
有没有一种方法可以通过对数据库进行最少的查询来实现这一点?我将尝试通过示例扩展@appect 获取所有实体,然后确定基本类型:
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
var-concreteEntities=context.Business.OfType().ToList();
//BusinessType1实体的一些逻辑
如您所见,您不需要使用实体框架执行任何其他查询。
BusinessType1
和BusinessType2
都是业务
的子类型(子类),而不是超类型。我喜欢调用它的基类而不是超级类型,但它们是相同的,在本例中,Business
是超级类型。你应该编辑以避免混淆。哦,天哪,我打错了。谢谢你把它捡起来!我确信这一定是混淆了我不明白为什么需要查询db来确定实际的类型(在客户机代码中有明确定义)?只需使用is
操作符即可?我想这是我的问题。EF是否返回了一个对象,其中“is”将进行计算,或者只是返回基本类型,其中“is”将不相关。感谢您提供的详细答案。工作得很有魅力。