读书人

MVC EF怎么进行修改操作

发布时间: 2013-01-28 11:49:56 作者: rapoo

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(); //保存
[解决办法]

这样

using (HBSIEntities entity= new HBSIEntities ())
{
T_UserInfo userinforow=entity.T_UserInfo.FirstOrDefault(t=>t.id==7);//你查出这个实体
if(userinforow==null)
{
return new T_UserInfo();
}
userinforow.NickName = "二师兄";//你的更新的
entity.SaveChanges();//这样就会自动帮你修改
}

读书人网 >asp.net

热点推荐