EF6 code first, загрузка наследников, огромный select union
От: Osaka  
Дата: 27.04.22 17:04
Оценка:
Есть модель 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, и ползает всё это неприлично долго).
От чего зависит это поведение? Я пока обнаружил только что наследные типы включаются в запрос если в иерархии сущностей присутствуют абстрактные классы.
Можно ли данным поведением управлять не меняя модель, а в рантайме, по-разному для разных типов и навигационных свойств?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.