Я так не думаю, потому что:
- Для отображения наследования базовый класс должен быть сущностью в EDMX.
- Когда используется наследование,
ObjectSet
для базового типа. Какой общий аргумент вы бы использовали для создания экземпляра ObjectSet
, когда он должен использоваться для извлечения любого подтипа?
Это может быть частично достигнуто без наследования (по крайней мере, для POCO). Просто смоделируйте свои подтипы в EDMX без базового типа. Затем вручную создайте классы POCO и выведите их из базовых базовых типов. Единственное правило, которому вы должны следовать, это то, что класс POCO должен иметь то же имя, что и сущность в EDMX, и у него должны быть все его свойства с возможностью доступа, установленной в EDMX. Если вы хотите использовать свойства отслеживания изменений, они должны быть помечены как виртуальные. Если вы хотите использовать ленивую загрузку, свойства навигации также должны быть виртуальными.
Пример:
Предположим, у меня есть два объекта в EDMX: IntegerValue и DoubleValue. Теперь я определил эти POCO следующим образом:
public abstract class BaseType<T>
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual T Value { get; set; }
}
public class IntegerValue : BaseType<int>
{ }
public class DoubleValue : BaseType<double>
{ }
Результатом будет одна таблица для каждого подтипа.