2
  • SQL Server 2008R2
  • 实体框架 4.x(早期版本)

我最近更改了 SQL Server 2088 R2 实例中的视图,使其现在包含一些LEFT OUTER JOINS,而不是INNER JOINS导致某些字段现在包含 NULL。这留下了一个例外,即不允许此字段为空,因为它们是实体键。

请注意,所有文件都是实体键

请注意,所有显示的内容都必须是实体键,并且图像仅显示整个视图的一部分。

那么我做错了什么吗?周围有什么解决办法,还是我必须忍受它。

这是错误之一

错误 213 运行转换:关键部分:类型 OrderSummary 的“WorkStepId”无效。密钥的所有部分都必须不可为空。

4

2 回答 2

3

实体键不允许为 NULL。实体框架必须能够通过一个或多个键的组合来确定实体的唯一性。我不知道您的确切数据情况,但可能有办法解决这个要求,但它不是很干净。

一种可能的解决方法是在您的视图 T-SQL 中包含逻辑,以将 NULL 值合并为已知的“虚拟”值。例如,使用上面的数据,您可以在读取时将两个 NULL 值设置为 -1。然而:

  • 您将不得不在保存时使用某种验证逻辑或存储过程,以防止在进行写入时将不良数据持久化到数据库中。
  • 您必须确保只能返回一行,其中每个 Id的 WorkStepId 和 StepStatusId 有两个 NULL 值。
于 2012-09-06T20:50:38.377 回答
2

EF 生成视图以将所有字段作为键,并且键必须具有值。使用左连接,您将拥有空列。因此,您将需要修改您现在可以为空的类型字段,以便它们不是键。目前我还没有机会在本地进行测试,所以我不能说您是否只需要修改概念级别或需要进入 DBML 来手动调整 SSDL 中的键。

于 2012-09-06T20:47:28.800 回答