Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 先按类型代码列出表-如何区分基本类型是否为子类型_C#_Entity Framework_Ef Code First_Superclass - Fatal编程技术网

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”将不相关。感谢您提供的详细答案。工作得很有魅力。