当前位置: 代码迷 >> .NET Framework >> 为何vs2012 中entityframework修改数据总是不成功
  详细解决方案

为何vs2012 中entityframework修改数据总是不成功

热度:66   发布时间:2016-05-01 23:34:24.0
为什么vs2012 中entityframework修改数据总是不成功
 Table_UserInfo user = new Table_UserInfo();
/*....user属性赋值......*/
oa.Table_UserInfo.Attach(user);
          oa.Entry(userTemp).State = System.Data.EntityState.Modified;
           try
            {
                oa.SaveChanges();
                Response.Write("<script>alert('修改成功')</script>");
            }
            catch (DbEntityValidationException dbEx)
            {       
                Response.Write("<script>alert('出现异常,修改失败!')</script>");
                return;
            }
为什么总是修改不成功,运行没有错,提示的是修改成功,但数据库中的数据并没有任何变化。
------解决方案--------------------
 Table_UserInfo user = new Table_UserInfo();

你这是new一个新的对象出来了,怎么可能修改成功呢?

EF的修改逻辑是: 先取后改!
int id=1;
 Table_UserInfo user = oa.Table_UserInfo.Find(id);


------解决方案--------------------
根据你的代码var userTemp = oa.Table_UserInfo.Where(p => p.U_Login_Name == U_lgname.Text.Trim()).FirstOrDefault();,你的操作是从数据源重新查询一次,然后再保存到数据库。也就是说没看到你在哪个地方改过数据。
引用:
Quote: 引用:

 Table_UserInfo user = new Table_UserInfo();

你这是new一个新的对象出来了,怎么可能修改成功呢?

EF的修改逻辑是: 先取后改!
int id=1;
 Table_UserInfo user = oa.Table_UserInfo.Find(id);

上面是网上的方法,http://www.haogongju.net/art/2562911。
然后我上网查,也有的说要先查后改,于是我也这样:
var userTemp = oa.Table_UserInfo.Where(p => p.U_Login_Name == U_lgname.Text.Trim()).FirstOrDefault();
/*....userTemp属性赋值......*/
oa.Table_UserInfo.Attach(userTemp);
          oa.Entry(userTemp).State = System.Data.EntityState.Modified;
           try
            {
                oa.SaveChanges();
                Response.Write("<script>alert('修改成功')</script>");
            }
            catch (DbEntityValidationException dbEx)
            {       
                Response.Write("<script>alert('出现异常,修改失败!')</script>");
                return;
            }
然后还是一样的,没有错误,但还是没有修改成功。真不知道怎么回事了,
  相关解决方案