我正在使用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();
答案 0 :(得分:2)
反向工程代码首先实际上类似于Database First,因为它为您生成模型,映射和数据上下文。
很可能你的问题是由错误的实体密钥引起的,正如@Aducci建议的那样。请查看this question以获取详细说明。
答案 1 :(得分:1)
问题与主键有关 EF中的每个实体都应该有一个ID,因此也就是主键。如果源表/视图没有主键,EF将尝试注入自己。所以问题来了,EF会将所有非可空列的组合作为密钥。当EF在本地实现对象时,它只会选择具有相同Key的第一个对象。