日期:2014-05-17  浏览次数:20487 次

MVC EF如何进行修改操作?
一直想得不是很明白,EF修改操作要怎么写比较好。我看到一些写法如下:

      HBSIEntities entity = new HBSIEntities();
            /*更改表的实体,注意在最后加上了“Id=7”,
             标识要更改实体表T_UserInfo中Id=7的行实体,
             为字段重新赋值即可*/
            T_UserInfo userinforow = new T_UserInfo()
            {
                UserName = "zbj",
                Pwd = "234567",
                NickName = "二师兄",
                Address = "高老庄",
                Sfzh = "123452223333444423",
                Id=7
            };
            entity.T_UserInfo.Attach(userinforow);
            entity.ObjectStateManager.ChangeObjectState(userinforow,EntityState.Modified);
            entity.SaveChanges();

但这样写的话,更改实体时,所有字段都要赋值,如我们本来只想为NickName属性改变之为”二师兄“,其余字段的值并不像更改,但仍然需要为其余字段赋上原值,否则更新到数据库中后,字段的值会成为NulL。如果我只想修改用户的密码,就很麻烦拉,因为不知道其它的值呀。
但如果在修改前,重新查一遍数据库,SaveChanges的时候会报错,说已经存在一个上下文了,纠结。
mvc EF

------解决方案--------------------

 HBSIEntities entity = new HBSIEntities();
            /*更改表的实体,注意在最后加上了“Id=7”,
             标识要更改实体表T_UserInfo中Id=7的行实体,
             为字段重新赋值即可*/
            T_UserInfo userinforow = new T_UserInfo()
            {
                UserName = "zbj",
                Pwd = "234567",
                NickName = "二师兄",
                Address = "高老庄",
                Sfzh = "123452223333444423",
                Id=7
            };
            entity.T_UserInfo.Attach(userinforow); //////这句去掉  因为你查询的时候这个对象已经Attach过了