Здравствуйте, Osaka, Вы писали:
O>Есть модель EF из C#-классов, допустим, с базовым типом и 100 наследников различной степени вложенности. O>Маппинг "таблица на конкретный тип" (каждая таблица содержи только записи своего типа, и все поля всех предков). O>Читаем в модель через DBSet все строки типа Base.
Очевидно это потребует чтения всех таблиц и union all
Как иначе получить все экземпляры, унаследованные от base?
O>В некоторых случаях EF генерит простой sql "select ... from Base", а в других — огромный развесистый union всех наследных типов. (Размер sql-запроса может достигать сотен kb, и ползает всё это неприлично долго). O>От чего зависит это поведение? Я пока обнаружил только что наследные типы включаются в запрос если в иерархии сущностей присутствуют абстрактные классы.
Покажи код запроса и какой sql он генеирует, пока непонятно является ли такой SQL избыточным или он генерирует ровно то, что нужно.
O>Можно ли данным поведением управлять не меняя модель, а в рантайме, по-разному для разных типов и навигационных свойств?
Можно, если сделать проекцию.