entity framework。 查看返回重复logging

我使用包含视图的entity framework。 我有问题:

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

这个查询返回一组实体,但第一个实体等于第五个。

 data[0] == data[4] // true 

我从SQL跟踪器采取SQL脚本这个查询,并运行到SQLpipe理Studio,它返回不同的logging。

根据@Giovane答案

在我们的系统中,Entity Framework处理视图的时候也遇到了同样的问题。 尝试使用ROW_NUMBER()OVER()SQL来创build具有唯一值的列,但无效。

我做了同样的事情,但要做到这一点,我需要打开EDMX模型,然后select一个这个列作为一个实体的关键。

在这里输入图像说明

然后它会工作

这里有一篇很好的文章

重复的logging

最重要的文章是:

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

您只需要: context.viewname.AsNoTracking().Where(x => x.ColumnName != null);

在我们的系统中,Entity Framework处理视图的时候也遇到了同样的问题。 尝试使用ROW_NUMBER()OVER()SQL来创build具有唯一值的列,但无效。

我们需要在视图中插入一个字段,为另一个表添加一个FK,这样它可以添加为mebro EntityKeyMembers Elimite的附加训练等等重复的问题。

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

在视图中尝试将第一个logging转换为非空值,如下所示:

 isnull(ROW_NUMBER() OVER (ORDER BY "Column"), 0) AS Row 

它指示entity framework可以自动成为主键。

如果您不想更新edmx并将任何键设置为列&&

如果你不想更新查看logging(只为获取logging),然后使用下面的代码为我工作。

 context.viewname.MergeOption = System.Data.Objects.MergeOption.NoTracking; context.viewname.Where(x => x.columnname != null);