zoukankan      html  css  js  c++  java
  • 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()方法。

  • 相关阅读:
    tcl tk lappend
    file join
    [转载]强指针和弱指针
    DisplayHardware
    Android 十大调试方法
    C语言程序的外部变量与函数
    DisplayHardware
    Android 十大调试方法
    wifi连接流程分析
    [转载]强指针和弱指针
  • 原文地址:https://www.cnblogs.com/zwjaaron/p/2652030.html
Copyright © 2011-2022 走看看