实体框架5:如何查询不从任何派生实体继承的基础实体

时间:2013-06-06 13:57:05

标签: inheritance entity-framework-5

如果我有一个Employee实体,那么派生实体类型如下:

class Employee
{ // ...
}

class FireWarden : Employee
{ // ...
}

class KeyHolder : Employee
{ // ...
}

如何查询既不消防监护人或密钥持有人,也不是任何其他特殊类型员工的员工?

我尝试过的一些事情:

Employees.OfType<Employee>(). ... 

返回所有员工(正如您所期望的那样)。

Employees.Where(e => (e.GetType() == TypeOf(Employee)). ... 

因运行时错误而失败,说实体框架的内容不支持GetType()。

我可以写

var normalEmployees = Employees.Where(e => !(e is FireWarden || e is KeyHolder));

但是如果我引入一个派生自Employee的新实体,我需要确保更新所有这些查询以排除新类型。

我想我可以添加一个“SpecialEmployee”类,派生自Employee,并从中派生出其他类型。然后我不必更新所有查询,但这感觉有点像尾巴摇着狗。

1 个答案:

答案 0 :(得分:1)

如果普通员工不能成为FireWarden或KeyHolder,那么您可以为NormalEmployee创建一个特殊类型

考虑以下

class Employee
{ // ...
}

class NormalEmployee: Employee
{
    //
}

class FireWarden : Employee
{ // ...
}

class KeyHolder : Employee
{ // ...
}

Employees.OfType<NormalEmployee>()