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过了
entity.ObjectStateManager.ChangeObjectState(userinforow,EntityState.Modified);
entity.SaveChanges();
[解决办法]
HBSIEntities entity = new HBSIEntities();
T_UserInfo userinforow = new entity.Find(7); //获取原对象
userinforow.NickName = "二师兄"; //更新字段
entity.SaveChanges(); //保存
[解决办法]