【发布时间】: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