Есть модель EF из C#-классов, допустим, с базовым типом и 100 наследников различной степени вложенности.
Маппинг "таблица на конкретный тип" (каждая таблица содержи только записи своего типа, и все поля всех предков).
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Base>()
.Map<Child1>(m =>
{
m.ToTable("Child1");
m.MapInheritedProperties();
})
.Map<Child2>(m =>
{
m.ToTable("Child2");
m.MapInheritedProperties();
})
....
Читаем в модель через DBSet все строки типа Base.
В некоторых случаях EF генерит простой sql "select ... from Base", а в других — огромный развесистый union всех наследных типов. (Размер sql-запроса может достигать сотен kb, и ползает всё это неприлично долго).
От чего зависит это поведение? Я пока обнаружил только что наследные типы включаются в запрос если в иерархии сущностей присутствуют абстрактные классы.
Можно ли данным поведением управлять не меняя модель, а в рантайме, по-разному для разных типов и навигационных свойств?