[EDMX] Таблица расщепления - PullRequest
       25

[EDMX] Таблица расщепления

0 голосов
/ 23 марта 2011

Я работаю с Entity Framework 4.1 с POCO.Я хотел бы отобразить таблицу Employees:

EmployeeID
LastName
FirstName
ManagerID
IsManager

(с рефлексивной ассоциацией ManagerID в таблице Employee)

In

Абстрактный класс EmployeeBase содержит

EmployeeID
LastName
FirstName

И класс Employee (Inherits EmployeeBase), когда IsManager равен false, содержит

ManagerID

И класс Manager (Inherits EmployeeBase), когда IsManager равен true

Моя проблема в том, что в контексте TT у меняDbSet<EmployeeBase>.Как я могу сгенерировать DbSet<Employee> и DbSet<Manager>?

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Вы не можете иметь 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 
1 голос
/ 23 марта 2011

Подробное объяснение аналогичного примера в этой статье дано, ключевая деталь называется отображением «таблица на иерархию»:

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

...