首页 > 解决方案 > 实体框架显示多个同一行

问题描述

这很奇怪,我正在使用 ASP.NET MVC 应用程序和实体框架来映射数据库中的视图。

我不知道为什么,但是查询多次返回相同的行(5 行,每次 2 次),而在数据库中,视图显示了 10 个不同的行。

不明白发生了什么。

请帮忙!

标签: sql-serverasp.net-mvcentity-frameworkviewentity-framework-4

解决方案


这是一个众所周知的观点问题。由于 SQL Server 中的视图(与实际表相反)没有定义的主键,因此 EF 将使用所有不可为空的列作为主键。这些可能是字符串或其他数据类型——它们可能真的不能构成一个“好的”主键。

现在,当 EF 读取数据时,它会遇到有问题的第一行,将其读入数据集,并确定该行的“替代主键”是什么。然后,当它从数据库视图读取下一行时,如果不可为空的列都相同,EF 会将其解释为“这又是同一行”并且它实际上不会存储数据库视图中的值,但是它只会使用它之前刚刚读取的行 - 因为主键是相同的,所以这是一种有效的方法。

如何解决这个问题?

  1. 您可以为您的视图实体显式定义一个基于 EF 的主键,该主键实际上对于读取的每一行都是不同的

  2. 您可以包含视图中涉及的所有表的主键列- 这样,每个表中的唯一值将出现在视图中,从而导致 EF 正确地将这些不同的行识别为不同的行。


推荐阅读