sql-server - 实体框架显示多个同一行
问题描述
这很奇怪,我正在使用 ASP.NET MVC 应用程序和实体框架来映射数据库中的视图。
我不知道为什么,但是查询多次返回相同的行(5 行,每次 2 次),而在数据库中,视图显示了 10 个不同的行。
不明白发生了什么。
请帮忙!
解决方案
这是一个众所周知的观点问题。由于 SQL Server 中的视图(与实际表相反)没有定义的主键,因此 EF 将使用所有不可为空的列作为主键。这些可能是字符串或其他数据类型——它们可能真的不能构成一个“好的”主键。
现在,当 EF 读取数据时,它会遇到有问题的第一行,将其读入数据集,并确定该行的“替代主键”是什么。然后,当它从数据库视图读取下一行时,如果不可为空的列都相同,EF 会将其解释为“这又是同一行”并且它实际上不会存储数据库视图中的值,但是它只会使用它之前刚刚读取的行 - 因为主键是相同的,所以这是一种有效的方法。
如何解决这个问题?
您可以为您的视图实体显式定义一个基于 EF 的主键,该主键实际上对于读取的每一行都是不同的
您可以包含视图中涉及的所有表的主键列- 这样,每个表中的唯一值将出现在视图中,从而导致 EF 正确地将这些不同的行识别为不同的行。
推荐阅读
- kubernetes - 如何在 Kubeflow 中安排作业?
- c++ - 自定义 C++ 迭代器立即结束
- c++ - 使用 Libpcap 解析 CNAME 的问题:一些 CNAME 似乎缺少 TLD
- vim - 如何在 g/pattern/move 中插入原始行号
- haskell - 如何将类型化进程通过管道传输到 wai-conduit 的 responseSource?
- python - 如何从现有列表的不同元素创建新列表?
- vmware - 在 NixOS 上安装 VMWare Player
- r - 在 R 中使用 dplyr::if_else() 根据另一个变量的值更改 POSIXct 时间戳的时区
- django - 无法使用 django rest 框架创建嵌套评论功能
- ruby - 如何从 slack ruby bot 的字符串中提取值