首页 新闻 会员 周边

ef core 如何更新数据?

0
悬赏园豆:40 [已解决问题] 解决于 2016-09-03 11:01

现在我知道的一种更新数据的方式是先取出实体,然后更新实体的数据,最后SaveChanges,然后我想能不能跳过查询这一步,直接去修改数据?

而且我在更新自己通过 AsNoTracking 取出来的实体的时候,然后 Attach 的时候会抛出异常,提示我不能跟踪主键相同的实体,有什么办法能够解决掉这个异常吗?

不如隐茶去的主页 不如隐茶去 | 小虾三级 | 园豆:559
提问于:2016-09-02 17:35
< >
分享
最佳答案
0

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导致的问题。

收获园豆:40
czd890 | 专家六级 |园豆:14312 | 2016-09-02 17:59

我是用的 WebApi ,DbContext是用的autofac的每次请求实例化一个对象注入的。是因为这个原因吗?

不如隐茶去 | 园豆:559 (小虾三级) | 2016-09-02 22:28

@不如隐茶去: 

如果是autofac应该没有共享contex的问题。可以查查代码是不是你的这个entity有导航属性,关联了其他entity。可能是他关联的entity,context在管理state

czd890 | 园豆:14312 (专家六级) | 2016-09-02 23:56

@calvinK: 果然是导航属性的锅,但是好像也没有很好的办法去取消对导航属性的跟踪,还是要谢谢大神的指导

不如隐茶去 | 园豆:559 (小虾三级) | 2016-09-03 11:01
其他回答(1)
0

不能.用ef了.就乖乖照着key/value的方式操作.整体性能要好写.并且思路清晰

吴瑞祥 | 园豆:29449 (高人七级) | 2016-09-02 18:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册