Я работаю над приложением EF5 Code First, и до сих пор все шло хорошо, но я столкнулся с проблемой, и я надеюсь, что кто-то может предложить решение.
По сути, у меня есть базовый класс и несколько производных классов, и мне интересно, как обрабатывать их сопоставление. Вот смехотворно упрощенный пример:
[Table("Person")]
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
[Table("EmployeePerson")]
public class EmployeePerson : Person
{
public int HoursWorked { get; set; }
}
[Table("CustomerPerson")]
public class CustomerPerson : Person
{
public int DollarsSpent { get; set; }
}
Пока что это типичный сценарий Table-per-Type, за исключением того, что базовый класс не является абстрактным — возможно иметь Person
, который не является EmployeePerson
или CustomerPerson
. У меня возникли проблемы с тем, чтобы EF принял это, и когда я пытаюсь загрузить такой объект по идентификатору, уродливый запрос, сгенерированный EF, не возвращает строк.
Кто-нибудь реализовывал что-то подобное раньше? Всегда ли отображение в стиле TPT требует, чтобы базовый класс был абстрактным? Я не смог найти ни одного примера обратного, но и реального подтверждения. Я могу придумать несколько уродливых обходных путей, которые я мог бы использовать, если бы мне пришлось, но я бы предпочел более элегантное решение, если оно есть.
(Еще одна загвоздка: я работаю со сторонней базой данных, поэтому не могу внести какие-либо изменения в схему.)
Спасибо!