实体框架显示多个同一行

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正确地将这些不同的行识别为不同的行。

【讨论】:

以上是关于实体框架显示多个同一行的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架从数据库中检索值

如何用实体框架选择多列并用textBlocks显示?

如何从使用实体框架的外键链接的多个表中获取所有数据?

在实体框架中添加唯一索引会阻止 DataTables 显示工作

如何首先使用实体​​框架代码更新一行?

如何在实体框架中完全锁定一行