实体框架:针对 EF 中的视图的查询(C# 代码)返回重复结果
本文关键字:代码 返回 结果 查询 框架 针对 EF 视图 实体 | 更新日期: 2023-09-27 18:32:49
我正在使用 EF 对数据库视图进行查询。 查询可以返回正确数量的记录,但所有记录都相同。但是,当我在 sql SSMS 中运行原始查询时,一切都很好。
有人可以提供有关可能的根本原因的一些线索吗?
视图定义如下所示:
CREATE VIEW [dbo].[v_JobAEWeekly]
AS
SELECT
VCId,
JobRegistryId,
JobNamingId,
JobPrefix,
DATEADD(dd, DATEDIFF(week, CONVERT(DATETIME, '2013-01-01 00:00:00', 102), JobDate) * 7 - 2, CONVERT(DATETIME, '2013-01-01 00:00:00', 102)) AS JobDateWeekSeqStartDate,
COUNT(*) AS JobCounts,
FROM dbo.HistoricalJobInfo
WHERE (JobStateId = 2) AND (TotalYieldTimeInMinutes = 0)
GROUP BY VCId, JobRegistryId, JobNamingId, JobPrefix, DATEADD(dd, DATEDIFF(week, CONVERT(DATETIME, '2013-01-01 00:00:00', 102), JobDate) * 7 - 2, CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
GO
查询如下所示:
//Problem:This query will return two records but the two records are the same.
var jobAEWeeklyHistory = contextDjs.v_JobAEWeekly.Where(x => x.JobRegistryId == 11 && x.JobDateWeekSeqStartDate > date).ToList();
逆向工程 Code First 实际上类似于 Database First,因为它会为您生成模型、映射和数据上下文。
正如@Aducci所建议的那样,您的问题很可能是由错误的实体键引起的。查看此问题以获取详细说明。
问题在于主键。
EF 中的每个实体都应有一个 ID,因此应具有主键。如果源表/视图没有主键,EF 将尝试注入自身。所以问题来了,EF 会将所有不可为空的列组合为键。当 EF 在本地具体化对象时,它将仅选择具有相同键的第一个对象。