在Entity Framework(Discriminator)中使用继承时如何输出结果

时间:2017-09-12 16:31:01

标签: c# entity-framework

我有4个来自基类的类。

子类有一些额外的属性。这导致数据库中的单个组合表具有额外的列' Discriminator'。这是由EF自动完成的,用于在加载数据时识别对象的类型。

BaseTask 是基类

Task1 
Task2
Task3
Task4 

Task1类有一个名为 SpecialKey 的属性。 类从BaseTask驱动

所以现在我想列出从表到UI的所有对象。

当我加载表格结果如下:

var tasks = DbContext.BaseTasks.ToList();

foreach(var task in tasks){

// output all columns details from BaseTask table from database
}

但正如您所看到的那样,因为 SpecialKey 不是基类的一部分,所以我无法输出该属性。

我该如何克服这个问题?

我真的必须做以下事情吗?

    var tasks = DbContext.BaseTasks.ToList();

        foreach(var task in tasks.OfType<Task1>){
        // output task 1 details
        }

        foreach(var task in tasks.OfType<Task2>){
        // output task 2 details
        }

        foreach(var task in tasks.OfType<Task3>){
        // output task 3 details
        }

...等 这看起来很乱。这真的告诉我继承不是创建表对象的好主意。

1 个答案:

答案 0 :(得分:0)

您可以编写一个简单的检查来查看它的类型并执行特定的操作:

foreach(var task in tasks){

    if (task is Task1) { // do whatever you need to... }
    // other checks...
}