【问题标题】:View data in the database is difference from what EF generate查看数据库中的数据与 EF 生成的数据不同
【发布时间】:2014-09-17 15:48:20
【问题描述】:

当我在事件 ID 列上组合许多表时,我在使用 Entity Framework 中的 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 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,没有发现异常,只是select from的简单嵌套语句......

【问题讨论】:

  • 您好像缺少 PrimaryKey。
  • 哦,那我也应该为视图设置主键吗?据我所知,我用来创建视图的表中的数据列没有键。
  • 参考此链接解决您的问题。我曾经有过类似的问题。 girlfromoutofthisworld.com/…
  • 爱你,伙计,非常感谢,你能发布你的答案,这样当我得到这个工作时我可以投票回答吗?
  • 不确定您是否还在,但弹出另一个问题...只有 oID col 是 PK,其余的是可为空的值,我什至无法为 netval 和 indivalue 创建 PK如果我想尝试使它们成为复合键....有没有办法为 oracle 获取 rowID?

标签: c# sql database oracle entity-framework


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    关于 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 容器时,请@设计器窗口,将其与视图数据绑定。它对我来说正确显示:)

    甜!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多