У меня есть сущность, настроенная так, чтобы ее всегда запрашивали со свойством «DELETED» = «N». В EF 6 я мог бы сделать:
modelBuilder.Entity<MyEntity>().Map(m => m.Requires("DELETED").HasValue("N"))
SELECT `n`.`id`.
FROM `OtherEntity` AS `n`
LEFT JOIN `MyEntity` as `e` ON (`e`.`DELETED`='N') AND (`e`.ID = `n`.ID)
и ORM автоматически добавит AND (DELETED = 'N')
ко всем соединениям. Если я попытаюсь использовать фильтры запросов или наследование таблицы для каждой иерархии в Entity Framework Core, возникнет проблема — все соединенные таблицы будут преобразованы в подзапросы. Это убивает мою производительность.
modelBuilder.Entity<BaseEntity>().HasDiscriminator(e => e.Deleted) .HasValue<MyEntity>("N");
SELECT `n`.`id`.
FROM `OtherEntity` AS `n`
LEFT JOIN (
SELECT `n.Ent`.*
FROM `MyEntity` AS `n.Ent`
WHERE `n.Ent`.`DELETED` = 'N'
) AS `t` ON `n`.`ID` = `t`.`ID`
Есть ли способ улучшить этот sql? Может быть, сторонний провайдер может это исправить?
Мы не можем воспроизвести проблему в нашей среде. Отправьте нам небольшой тестовый проект с соответствующим DDL-скриптом через https://www.devart.com/company/contactform.html.
Значит, этого не должно быть? Потому что у меня такая же проблема
Извините за неточность. Я попробовал официального провайдера Oracle и пометил devart, потому что хотел посмотреть, справится ли ваш драйвер с этим лучше, чем по умолчанию.