实体框架显示多个同一行
Posted
技术标签:
【中文标题】实体框架显示多个同一行【英文标题】:Entity Framework show multiple the same row 【发布时间】:2018-12-21 05:44:31 【问题描述】:这很奇怪,我正在使用 ASP.NET MVC 应用程序和实体框架来映射数据库中的视图。
我不知道为什么,但是查询多次返回相同的行(5 行,每次 2 次),而在数据库中,视图显示了 10 个不同的行。
不明白发生了什么。
请帮忙!
【问题讨论】:
请分享您的代码。 【参考方案1】:这是一个众所周知的视图问题。由于 SQL Server 中的视图(与实际表相反)没有定义的主键,EF 将使用 所有不可为空的 列作为主键。这些可能是字符串或其他数据类型——它们可能真的不能构成一个“好的”主键。
现在,当 EF 读取数据时,它会遇到有问题的第一行,将其读入数据集中,并确定该行的“替代主键”是什么。然后,当它从数据库视图中读取下一行时,如果不可为空的列都相同,EF 会将其解释为“这又是同一行”并且它会 NOT 实际上存储来自数据库视图的值,但它只会使用它之前刚刚读取的行 - 因为 主键 是相同的,所以这是一种有效的方法。 p>
如何解决?
您可以为视图实体显式定义基于 EF 的主键,该主键实际上对于读取的每一行都是不同的
您可以包含视图中涉及的所有表的主键列 - 这样,每个表中的唯一值将出现在视图中,从而导致 EF正确地将这些不同的行识别为不同的行。
【讨论】:
以上是关于实体框架显示多个同一行的主要内容,如果未能解决你的问题,请参考以下文章