如何使用继承与实体框架4确定实体的子类型?

时间:2010-05-11 22:24:40

标签: entity-framework inheritance entity-framework-4

我刚开始第一次使用Entity Framework 4。到目前为止,我喜欢它,但我对如何正确进行继承感到困惑。

我正在做一个模型优先的方法,我的Person实体有两个子类型实体,Employee和Client。 EF正确使用每种类型的表方法,但我似乎无法弄清楚如何确定特定对象的Person类型。

例如,如果我做了类似

的事情
var people = from p in entities.Person select p;
return people.ToList<Person>();

在我从此形成的列表中,我关心的是Id字段,所以我不想实际查询所有子类型表(这是一个带链接的网页列表,所以我需要的只是名称和Id,全部在人员表中)。

但是,我想使用这一个查询形成不同的列表,每个类型的人一个(所以一个列表用于客户端,另一个列表用于员工)。

问题是如果我有一个Person实体,我看不到任何方法来确定该实体是客户端还是员工而不直接查询客户端或员工表。如何在不执行大量额外数据库查询的情况下轻松确定实体的子类型?

1 个答案:

答案 0 :(得分:5)

在查询中使用.OfType<Client>()来获取客户端。请参阅OfType

e.g。 entities.Person.OfType<Client>() ...

使用is来测试Person对象是否是特定的子类,例如if (p is Employee) ...

BTW为什么不是entities.People?你没有选择复数选项吗?