0

我正在与 POCO 一起使用 Entity Framework 4.1。我想映射表员工:

EmployeeID
LastName
FirstName
ManagerID
IsManager

(与 Employee 表中的 ManagerID 自反关联)

EmployeeBase 抽象类包含

EmployeeID
LastName
FirstName

IsManager 为 false 时的 Employee 类(Inherits EmployeeBase)包含

ManagerID

IsManager 为 true 时的 Manager 类(继承 EmployeeBase)

我的问题是,在上下文 TT 中,我只有DbSet<EmployeeBase>. 我怎样才能生成DbSet<Employee>DbSet<Manager>

4

2 回答 2

1

本文对类似示例有详细解释,关键细节称为“table-per-hierarchy”映射:

http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph。 aspx

于 2011-03-23T16:08:36.843 回答
1

您不能拥有DbSet派生类型。这就是继承映射的工作方式。您总是DbSet只有基本类型,如果您只想为子类型运行查询,您将使用OfType扩展方法。

在你的情况下:

var query1 = context.Employees;                    // returns all employes and managers
var query2 = context.Employees.OfType<Employee>(); // returns only employees
var query3 = context.Employees.OfType<Manager>();  // returns only managers 
于 2011-03-23T19:05:31.123 回答