EF Core创建子查询,而不是在查询过滤器或TPH中加入

时间:2019-01-22 14:32:04

标签: mysql entity-framework-core devart entity-framework-core-2.1

我将实体配置为始终使用属性“ 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 :(得分:0)

我们无法在我们的环境中重现该问题。请通过https://www.devart.com/company/contactform.html向我们发送一个包含相应DDL脚本的小型测试项目。