【发布时间】:2014-11-20 19:58:58
【问题描述】:
我的视图正确地返回了唯一的结果,但是由于视图的设置方式(Id 字段来自我的 EmployeeId 表)实体框架尝试缓存结果并且不读取每个字段(因此会出错,因为它认为它找到了重复的键)
我有以下表格(此处简化):
Employee
Id
Name
Jobs
Id
Name
EmployeeJobAssociations
Id
EmployeeId
JobId
StartDate
EndDate
EmployeeJobsView
Id (This is actually EmployeeId)
AssociationId (This is EmployeeJobs's Id)
JobId (Job's table Id)
Name (EmployeeName)
JobName
StartDate
EndDate
查看代码如下:
SELECT dbo.Employees.Id, dbo.EmployeeJobAssociations.Id AS AssociationId,
dbo.Jobs.Id as JobId, dbo.Employees.Name, dbo.EmployeeJobAssociations.StartDate,
dbo.EmployeeJobAssociations.EndDate, Job.Name AS JobName
FROM dbo.Jobs AS Job INNER JOIN
dbo.EmployeeJobAssociations ON Job.Id = dbo.EmployeeJobAssociations.JobId RIGHT OUTER JOIN
dbo.Employees ON dbo.EmployeeJobAssociations.EmployeeId = dbo.Employees.Id
所以因为我使用 EmployeeId 作为主要字段(我希望没有 JobAssociation 的员工也出现在我的视图中)实体框架认为员工的所有结果都是相同的:
Id AssociationId JobId ... StartDate
1234 1 1 10/10/10
1234 2 2 11/11/10 // Unless I turn off tracking it thinks this is the same as the first row
2222 null null null
是否可以使表具有基于 EmployeeId (Id) 和 AssociationId 的索引,即使 AssociationId 可以为空(但每个 EmployeeId 只能为空ONCE)?
【问题讨论】:
标签: c# sql-server entity-framework tsql entity-framework-6