【问题标题】:Unique index on view with nullable columns具有可为空列的视图上的唯一索引
【发布时间】: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


    【解决方案1】:

    我现在最终使用了这个解决方法:

    如果 AssociationId 为 null,则将 AssociationId 设置为 0,然后创建 EmployeeId 和 AssociationId 的主键

    ISNULL(dbo.EmployeeJobAssociations.Id, 0) AS AssociationId
    

    在实体框架中:

    modelBuilder.Entity<EmployeeJobAssociationView>.HasKey(x => new { x.Id, x.AssociationId});
    

    【讨论】:

      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 2013-03-21
      • 2021-01-10
      • 2021-11-18
      • 2013-01-05
      • 2016-04-14
      相关资源
      最近更新 更多