Ef core создает подзапрос вместо объединения в Query Filters или TPH - PullRequest
0 голосов
/ 22 января 2019

У меня есть объект, настроенный на всегда запрашивать свойство "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? Может, сторонний провайдер может это исправить?

1 Ответ

0 голосов
/ 07 февраля 2019

Мы не можем воспроизвести проблему в нашей среде.Пожалуйста, пришлите нам небольшой тестовый проект с соответствующим сценарием DDL через https://www.devart.com/company/contactform.html.

...