查看数据库中的数据与EF生成的数据不同

时间:2014-09-17 15:48:20

标签: c# sql database oracle entity-framework

当我在事件ID列上组合了许多表时,我在使用Entity Framework中的distinct()时遇到了麻烦,因此我决定在数据库中创建一个视图,而我只需要将其拉入EF并显示在datagrid上。

而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 toList()视图时:

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并看到没有异常,只是简单的嵌套语句选择....

2 个答案:

答案 0 :(得分:1)

您需要在视图上设置主键。看起来EF使用oID字段作为默认主键。您必须设置主键,然后更新模型。请参阅此链接http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/

答案 1 :(得分:0)

关于antar125的答案。它对我来说并不适合锻炼,因为我使用的是Oracle数据库,而Coalesce并不适合我。 我找到了一些其他的选择,我希望它能帮助那些寻找解决这个问题的人。

发现同样的问题,人们在这里讨论: Duplicate Rows when Data Binding with LINQ to Entities

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容器时,请在设计器窗口中将其与视图进行数据绑定。它正确显示给我:)

甜!!