mvc3的SaveChanges()方法无效,数据并没有更新!

  1. 在MVC3中页使用Html.BeginForm()直接提交一个Entity进行更新,发现不行:也不会报错,就是数据没有实际更新掉!
  2. 查看底层的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()方法。

posted on 2012-08-23 10:48  浪迹上海滩  阅读(2251)  评论(0编辑  收藏  举报

导航