c# - Entity Framewrok 6.2.0 Table-Per-Hierarchy 继承奇怪的查询生成时按类型过滤
问题描述
我已经为一个项目创建了一个 TPH,对其进行了配置,并且在 EF 6 上一切正常,但是我注意到有一次当我按类型过滤时生成的查询:
var existingTransaction = ctx.Transactions.Where(tr => tr.BalanceId == 1 && ids.Contains(tr.ParticipationId) && tr is DepositTransaction);
这会生成以下查询:
SELECT
[Extent1].[TransactionType] AS [TransactionType],
[Extent1].[Id] AS [Id],
[Extent1].[BalanceId] AS [BalanceId],
[Extent1].[ParticipationId] AS [ParticipationId],
[Extent1].[Name] AS [Name],
[Extent1].[TransactionAmount] AS [TransactionAmount]
FROM [dbo].[Transactions] AS [Extent1]
WHERE ([Extent1].[TransactionType] IN (1,2,4,3)) AND (1 = [Extent1].[BalanceId]) AND ([Extent1].[ParticipationId] IN (1, 2, 3, 4, 5)) AND ([Extent1].[TransactionType] = 2)
注意事务类型的部分,它包含了所有配置的事务类型,虽然查询在语义上是正确的,但很奇怪。当我删除其他过滤器并仅按类型保留过滤器时:
var existingTransaction = ctx.Transactions.Where(tr => tr is DepositTransaction);
查询看起来像预期的那样:
SELECT
'0X0X' AS [C1],
[Extent1].[Id] AS [Id],
[Extent1].[BalanceId] AS [BalanceId],
[Extent1].[ParticipationId] AS [ParticipationId],
[Extent1].[Name] AS [Name],
[Extent1].[TransactionAmount] AS [TransactionAmount]
FROM [dbo].[Transactions] AS [Extent1]
WHERE [Extent1].[TransactionType] = 2
那么,为什么第一个是这样的呢?
解决方案
推荐阅读
- ios - 如何从字典数组中获取数据 - swift
- java - Java 9 替换 Class.newInstance
- office365 - 如何从 powerapps 为 Office 365 环境中的用户启用自定义角色
- amazon-web-services - 如何将 S3 数据向上移动到一个分区级别?
- microservices - Hystrix 仪表板指标正在重置
- r - 可选函数参数
- php - 具有自定义排序的 Magento 产品集合分页
- php - 如何使用路由通过 laravel 查看静态 apidoc 页面
- jenkins - 如何识别当前目录中的所有html文件
- python - 如何创建一个值是集合的字典?