现在我知道的一种更新数据的方式是先取出实体,然后更新实体的数据,最后SaveChanges,然后我想能不能跳过查询这一步,直接去修改数据?
而且我在更新自己通过 AsNoTracking 取出来的实体的时候,然后 Attach 的时候会抛出异常,提示我不能跟踪主键相同的实体,有什么办法能够解决掉这个异常吗?
nuget搜一个entityframework.extendend。如果涉及到事务,好像这个组件据说有点bug,不知道现在修复了没
比如:
.where(p=>p.id==1).update(p=>newe{name=p.id+=1});
ef,不会查数据,而是直接生成update set name=id+1 where id=1
AsNoTracking出来的实体,ef是不跟踪state的。如果你attach有问题,请检查代码。是否真的AsNoTracking了,并排除共享context导致的问题。
我是用的 WebApi ,DbContext是用的autofac的每次请求实例化一个对象注入的。是因为这个原因吗?
@不如隐茶去:
如果是autofac应该没有共享contex的问题。可以查查代码是不是你的这个entity有导航属性,关联了其他entity。可能是他关联的entity,context在管理state
@calvinK: 果然是导航属性的锅,但是好像也没有很好的办法去取消对导航属性的跟踪,还是要谢谢大神的指导
不能.用ef了.就乖乖照着key/value的方式操作.整体性能要好写.并且思路清晰