实体框架.查看返回重复记录

Eug*_*nko 42 entity-framework duplicates

我使用包含视图的实体框架.我有疑问:

var data = this.context.vwRevenues
    .Where(x => x.revenue >= 0);
    .OrderByDescending(x => x.year)
    .ThenByDescending(x => x.month)
    .Take(10)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

此查询返回实体集,但第一个实体等于第5个.

data[0] == data[4] // true
Run Code Online (Sandbox Code Playgroud)

我从sql tracer获取此查询的sql脚本并将其运行到SQL Management Studio中,它返回不同的记录.

Moo*_*ons 80

根据@Giovane答案

我们的系统中存在同样的问题,实体框架处理视图.尝试使用ROW_NUMBER()OVER()SQL创建具有唯一值的列,但不起作用.

我做了同样的事情,但为了使它工作,我需要打开EDMX模型,然后选择此列作为实体键.

在此输入图像描述

然后它会工作

有一篇非常好的文章

重复记录

文章最重要的一行是:

在实体模型中包含视图时,模型似乎只使用第一个不可为空的列作为主键(因为主键中使用的所有列都应该是不可为空的).

  • 你拯救我的生命 (5认同)

Rah*_*arg 51

你只需要这样做: context.viewname.AsNoTracking().Where(x => x.ColumnName != null);

  • OMG - 扯掉我的头发(比喻) (2认同)

小智 12

我们的系统中存在同样的问题,实体框架处理视图.尝试使用ROW_NUMBER()OVER()SQL创建具有唯一值的列,但不起作用.

我们需要在视图中为另一个表插入一个更多的字段,一个FK,以便它可以作为mebro EntityKeyMembers Elimite的附加培训添加,因此重复的问题.

因此,如果在这种情况下问题仍然存在,解决方案是为它插入一个FK列,使其成为构成表的EntityKey的字段的成员.