首页 新闻 赞助 找找看

EF 查询视图问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2015-09-28 18:48

视图是没有主键的,使用 EntityFramework Reverse POCO 生成 Code First,会自动把不能为空的字段当成主键。如果这些字段数据重复,那么整个查询出来的数据都是重复的。

有什么办法解决?

问题补充:

在查询视图中含有全部主键 用 .Distinct() 去重复,EF生成的sql没有 SELECT DISTINCT .

EF认为主键不会重复,所以就算加上.Distinct()也不会起作用

jj91821的主页 jj91821 | 菜鸟二级 | 园豆:461
提问于:2015-09-23 17:02
< >
分享
所有回答(2)
1

找到解决方案使用视图添加 .AsNoTracking() 就可以了

jj91821 | 园豆:461 (菜鸟二级) | 2015-09-23 17:21
0

1:个人觉得最好你还是加一个主键,视图其实也就是一张表(推荐)

2:你也可以用EF传人sql语句进行查询

3:1楼的你也可以试试

稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 18:05

添加 .AsNoTracking() 可以解决 数据重复问题,但是Distinct 不起作用。

现在解决方案是在视图添加个id 用ROW_NUMBER 但是这个影响效率。

改成 0 as viewId 可以解决Distinct 问题。

不知道有没有更好的解决方案。

支持(0) 反对(0) jj91821 | 园豆:461 (菜鸟二级) | 2015-09-23 18:25

@jj91821: 你传查视图的SQL进去会快很多,但不是很推荐,那样就有点违背EF,也可以去用存储过程,基本复杂的也都是存储过程

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 19:54

@稳稳的河: 你的Distinct可以用linq的

支持(0) 反对(0) 稳稳的河 | 园豆:4216 (老鸟四级) | 2015-09-23 19:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册