[请问]使用EF更新的时候,怎么减少查询数据库的次数

[请教]使用EF更新的时候,如何减少查询数据库的次数
标题可能说的不是很清楚,其实这里有几个环节,我一个个说。

1、EF更新数据库,目前使用的方法是
db.StudInfo.Attach(newinfo);
db.Entry(newinfo).State = System.Data.EntityState.Modified;
db.SaveChanges();
代码很清楚,但这里有个问题:因为newinfo这个数据实体的主键和表中已有的主键一致,所以是不能使用new后赋值的,必须先找到这个实体,然后将修改的信息一个个赋值,然后通过SaveChanges函数统一提交,但实际使用的过程中,因为这个数据实体已经不是刚开始读取到的实体了(虽然主键一样),所以不得不再查找一次,找到内存中存在的实体,然后再把值赋值这个实体之后提交。使用的方法是Find方法。
请问,这种情况,有没有可能直接将这个实体在内存中存在,或者像以前使用SQL那样,使用一条语句直接更新?因为我主键和信息全都知道了,但却没有办法Attach。

2、这个问题和上面的问题无关,是业务实体的问题
因为在数据实体的基础上,抽象了更加接近现实的业务实体,我们知道,数据实体是在内存中有一份副本的,不用次次查询数据库,但这个业务实体是我自己建立的,请问有没有什么办法让业务实体也像数据实体一样,在内存中保留一份副本,这样我查询的时候,不用去查询数据库,因为业务实体是在数据实体的基础上通过给各种属性赋值得到的,所以如果能够在内存中保留一份副本,则不需要每次读数据库,然后进行赋值这样操作了。
------解决思路----------------------
1:既然知道了主键信息,不想再次查询,就使用EF的ExecuteFunction方法,跟定一个储存过程,执行sql语句。
2:你可以把你的“业务实体” 存到到ObservableCollection集合中或者DataSet中(当然这是不方便的),来通过操作内存中的数据来实现业务,最后再执行更新数据库操作。不过,如果对于大数据的话,你一次性把数据加载到内存中,是比较耗时的。