【问题标题】:EntityDataSource repeats the first record instead of returning different records?EntityDataSource 重复第一条记录而不是返回不同的记录?
【发布时间】:2011-12-15 19:26:15
【问题描述】:

我有一个使用 EF4 的 ASP.NET Web 应用程序。我有一个包含 EntityDataSource 的页面,用于过滤 SQL Server 视图中的记录。有一个 GridView 绑定到我的 EntityDataSource 来显示视图记录。

我在许多页面上使用了这种方法,其中与 EntityDataSource 关联的 EntitySet 链接到 SQL 服务器。我现在第一次尝试使用绑定到 SQL view 的 EntitySet。

EntityDataSource 返回正确的行数,具体取决于 where 子句参数。

但是,从 EntityDataSource 返回的每一行都是完全相同的。

我已经调试了 GridView 的 RowDataBound 事件,并确认每次绑定的每一行都有完全相同的内容。

有趣的是,当您来回翻页时,被重复的记录会发生变化。我猜想任何给定页面中的第一个(或最后一个?)记录是被重复的记录。

这感觉像是 EF 或 EntityDataSource 中的错误。有没有人见过这种行为,或者您对如何解决它有任何建议?

【问题讨论】:

    标签: asp.net entity-framework data-binding gridview


    【解决方案1】:

    当从视图返回的实体的关键属性不是唯一的时,我已经看到在其他情况下会发生这种情况。 EF 最终只会实现一个实体,因此会出现问题。

    您确定标记为实体键的属性在视图中是唯一的吗?

    【讨论】:

    • 哇。事实证明,我的观点 - 仅用于报告 - 没有定义简洁的唯一键。每一行都是独一无二的,但您需要查看整行才能确定这一点。 edmx 画布围绕什么应该是独特的做出了一些“简化假设”。 ORM 需要对这类事情挑剔是有道理的。如果它足够聪明地看到视图不可更新,然后对什么构成新实体做出更聪明的假设,那就太好了。非常感谢这个解决方案!
    • 很棒的发现。这一定是 EF 中最违反直觉的问题。
    • 这似乎是一个错误!?谢谢你的回答
    【解决方案2】:

    Jeff 的回答完全正确,我想说一些身体的解决方案在他们的模型中没有唯一键, 也许您选择了一个没有唯一键的视图,然后您可以添加像 [RowNumber] 这样可以是唯一的列,并且不要忘记使用 [Key] 属性将其添加到您的视图模型中,如下所示:

     [Key]
     public int Row { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多