数据库中的视图数据与EF生成的不同
本文关键字:EF 视图 数据 数据库 | 更新日期: 2023-09-27 18:22:10
当我在事件ID列上组合许多表时,我在使用实体框架中的distinct()时遇到了问题,所以我决定在数据库中创建一个视图,我只需要将它拉到EF中并显示在数据网格上。
EF给了我一个我不知道如何解决的问题,即使当我提取EF生成的SQL时,我仍然看不到它的SQL命令有什么奇怪的…
所以我在数据库中的视图生成了这样的东西:
oID TIME LOC NETVAL INDIVALUE COUNT
01 10:00 A 0.803 0.803 6
02 8:00 B 1.164 1.164 1
02 8:00 B 1.164 1.252 1
02 8:00 B 6.012 1.164 1
02 8:00 B 6.099 6.099 1
但是,当我使用EF to List()时,视图:
var query = context.MY_VIEW.toList();
datagridview1.DataSource = query;
我得到这个:
oID TIME LOC NETVAL INDIVALUE COUNT
01 10:00 A 0.803 0.803 6
02 8:00 B 1.164 1.164 1
02 8:00 B 1.164 1.164 1
02 8:00 B 1.164 1.164 1
02 8:00 B 1.164 1.164 1
我还检查了EF生成的sql,没有发现任何异常,只是select from…的简单嵌套语句。。。。
您需要在视图中设置主键。看起来EF正在使用oID
字段作为默认主键。您必须设置主键,然后更新您的模型。请参阅此链接http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/
关于antar125答案。它对我来说不是很好,因为我使用Oracle数据库,而Coalesce对我来说不起作用。我找到了一些其他的选择,我希望它能帮助那些来寻找这个问题解决方案的人。
发现了相同的问题,人们在这里讨论:使用LINQ将数据绑定到实体时出现重复行
http://markcoleman.tumblr.com/post/25026903967/entityframework-and-a-view-with-no-primary-key
一个选项:http://elegantcode.com/2012/03/15/querying-entityframework-views-without-a-key/这个对我不起作用,因为它给了我一个例外,说数据库中没有视图,可能对其他人起作用。
另一种显示视图的方式来自遗留数据库(如果你只想查看它),那就是完全绕过EF。当您删除您使用的datagridview或w/e容器时,请@设计器窗口,将其与视图数据绑定。它对我来说显示正确:)
太好了!!