昨天在一个查询结果中,由于错误的设置了主键,导致最终出来的查询结果与执行的SQL语句结果不一致,浪费了大半天时间解决这个不是问题的问题。于是今天特意写个示例测试下,昨天的猜想是否正确:
首先建了一个视图里面有一些数据。
View_Demo
Id | UserName | ClassId | Grade |
---|---|---|---|
1 | 张三 | 1 | 1 |
2 | 李四 | 1 | 1 |
3 | 王五 | 2 | 1 |
4 | 李小龙 | 2 | 1 |
5 | 周星弛 | 2 | 1 |
6 | 刘德华 | 1 | 2 |
7 | 任达华 | 1 | 2 |
然后在VS中新建一个来自数据的EF模型,将视图添加到模型中,添加后的模型是这样的,注意主键标识:
VS自动把所有的字段设置成主键。通过应用查询出来的结果为:
没有错误。
我将视图中的主键重新设置一次,修改为这样:
执行结果不一样了。
猜想:EF在封装对象实体时,是否将主键作为标识,如果发现已经有相同主键的对象,就直接使用上一个的copy。不再进行新的封装。这个猜想待我空了再去验证。