Получается, что я последний, кто обнаружил фундаментальный уровень, который существует в Microsoft Entity Framework при реализации наследования TPT (Table Per Type).
Создав прототип с 3 подклассами,Базовая таблица / класс, состоящий из 20+ столбцов и дочерние таблицы, состоящие из ~ 10 столбцов, все работало прекрасно, и я продолжил работу над остальной частью приложения, доказав эту концепцию.Теперь пришло время добавить 20 других подтипов и OMG, я только начал просматривать генерируемый SQL на простом select, хотя мне интересен только доступ к полям базового класса.
Эта страница содержит прекрасное описание проблемы.
Кто-нибудь пошел в производство, используя TPT и EF, есть ли какие-либо обходные пути, которые будут означать, что я выиграл?Не нужно: a) Преобразовать схему в TPH (что противоречит всему, чего я пытаюсь достичь с помощью моей конструкции БД - urrrgghh!)?б) переписать с другим ORM?
Как я вижу, я должен иметь возможность добавить ссылку на хранимую процедуру из EF (возможно, с использованием EFExtensions), в которой есть TSQL, который выбирает только те поля, которые янеобходимость, даже использование кода, сгенерированного EF для монстра UNION / JOIN внутри SP, предотвратит генерирование SQL при каждом вызове - не то, что я намеревался бы сделать, но вы поняли идею.
Убийца, которого я обнаружил, заключается в том, что при выборе списка сущностей, связанных с базовой таблицей (но выбранная сущность не является таблицей подкласса), и я хочу отфильтровать поpk Базовой таблицы, и я делаю .Include("BaseClassTableName")
, чтобы разрешить мне фильтровать, используя x=>x.BaseClass.PK == 1
и получить доступ к другим свойствам, здесь также выполняется генерация исходного SQL.
Я не могу использовать EF4, так как я ограничен средами выполнения .net 2.0 с установленным 3.5 SP1.
У кого-нибудь есть опыт выхода из этого беспорядка?