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);