视图是没有主键的,使用 EntityFramework Reverse POCO 生成 Code First,会自动把不能为空的字段当成主键。如果这些字段数据重复,那么整个查询出来的数据都是重复的。
有什么办法解决?
在查询视图中含有全部主键 用 .Distinct() 去重复,EF生成的sql没有 SELECT DISTINCT .
EF认为主键不会重复,所以就算加上.Distinct()也不会起作用
找到解决方案使用视图添加 .AsNoTracking() 就可以了
1:个人觉得最好你还是加一个主键,视图其实也就是一张表(推荐)
2:你也可以用EF传人sql语句进行查询
3:1楼的你也可以试试
添加 .AsNoTracking() 可以解决 数据重复问题,但是Distinct 不起作用。
现在解决方案是在视图添加个id 用ROW_NUMBER 但是这个影响效率。
改成 0 as viewId 可以解决Distinct 问题。
不知道有没有更好的解决方案。
@jj91821: 你传查视图的SQL进去会快很多,但不是很推荐,那样就有点违背EF,也可以去用存储过程,基本复杂的也都是存储过程
@稳稳的河: 你的Distinct可以用linq的