这很奇怪,我正在使用ASP.NET MVC应用程序和实体框架来映射数据库中的视图。
我不知道为什么,但是查询多次返回相同的行(5行,每行2次),而在数据库中,该视图向我显示10个不同的行。
不知道发生了什么。
请帮助!
答案 0 :(得分:1)
这是一个众所周知的视图问题。由于SQL Server中的视图(与实际表相反)没有定义的主键,因此EF将使用所有不可空的列作为主键。这些可能是字符串或其他数据类型-并且它们可能实际上并不能构成一个“好的”主键。
现在,当EF读取数据时,它将遇到问题的第一行,将其读入数据集,并确定该行的“替代主键”是什么。然后,当它从数据库视图中读取下一行时,如果不可空列都相同,则EF会将其解释为“这又是同一行”,并且不实际上是从数据库视图中存储值,但是它只会使用之前读取的行-因为主键是相同的,所以这是一种有效的方法。>
如何解决这个问题?
您可以为视图实体显式定义一个基于EF的主键,实际上对于每个读取的行都是不同的
您可以包括视图中涉及的所有表的主键列-这样,每个表中的唯一值将出现在视图中,从而导致EF正确地将那些不同的行识别为不同的行。