数据库中的视图数据与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生成的不同

您需要在视图中设置主键。看起来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容器时,请@设计器窗口,将其与视图数据绑定。它对我来说显示正确:)

太好了!!