【问题标题】:Ef core creates subquery instead of join in Query Filters or TPHEf 核心在查询过滤器或 TPH 中创建子查询而不是联接
【发布时间】:2019-01-22 14:32:04
【问题描述】:

我将实体配置为始终使用属性“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吗?也许第三方提供商可以解决它?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 抱歉不准确。我尝试了官方的 Oracle 提供程序,并标记了 devart,因为我想看看您的驱动程序是否比默认处理更好。
    • 所以这不应该发生?因为我有同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2021-10-23
    • 1970-01-01
    相关资源
    最近更新 更多