mvc3的SaveChanges()方法无效,数据并没有更新!
- 在MVC3中页使用Html.BeginForm()直接提交一个Entity进行更新,发现不行:也不会报错,就是数据没有实际更新掉!
- 查看底层的Update方法如下:
public void Update(T entity) {
//这里的entity只做了一个判断,更新操作是通过context完成的 if (entity == null) throw new ArgumentNullException("entity"); //if (!this._context.IsAttached(entity)) // this._entities.Attach(entity); this._context.SaveChanges(); }
3. 分析原因:
DbSet对象并没有提供相应的接口,为什么呢?因为EF相信自己的Self Tracking能力。也就是说,EF认为把一个entity从context中加载出来,做一些变更,然后直接SaveChanges就可以了,不需要特意提供一个Update方法。
但是这里有一个前提,就是“entity是从context中加载出来”。如果entity是新new出来的呢?比如在MVC里,entity 很可能是ModelBinder帮我们new出来的,context对它一无所知,直接SaveChanges显然不会有任何效果。
4.正确更新操作:
1>.根据Id(PK)查询出entity:一定要使用这个entity进行其它操作
2>.将更新内容赋值给查询出的entity
3>.不能用BindModel过来的entity直接进行传递给update()方法。