实体框架显示多个同一行



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

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

不明白发生了什么。

请帮忙!

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

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

如何解决这个问题?

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

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

最新更新