EF操作-修改部分字段
在做项目的时候,肯定会用到更新数据库中的某条记录,而更新的时候,往往是更新数据库中的某几个字段,而不是全部字段,在此我们假设一个实体(TUsers)有如下字段:UserId,Account,Password,CreateDate,其中UserId是主键,自动增长。
修改方式一(修改全部字段)会比较麻烦
---------------------
本文来自 doubleicon 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u011872945/article/details/72966946?utm_source=copy
CodeFirstContext context = new CodeFirstContext(); TUsers user = new TUsers(); user.UserId = 0; user.Account = "administrator"; user.Password = "456"; user.CreateDate = DateTime.Now.AddYears(-1); context.Users.Attach(user); context.Entry(user).State = System.Data.Entity.EntityState.Modified; context.SaveChanges(); var userlist = context.Users.ToList(); foreach (var u in userlist) { Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password)); }
修改方式二、先查出来,修改以后,在写回去,代码如下:
CodeFirstContext context = new CodeFirstContext(); TUsers user = context.Users.Where(d => d.UserId == 0).FirstOrDefault<TUsers>(); user.Account = "administrator"; context.SaveChanges(); var userlist = context.Users.ToList(); foreach (var u in userlist) { Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password)); }
修改方式三、
还是手动创建对象,然后附加,需要改哪个字段值,就写出来,最后 保存就行
CodeFirstContext context = new CodeFirstContext(); TUsers user = new TUsers(); user.UserId = 0; var newuser = context.Users.Attach(user); newuser.Account = "admin123"; context.SaveChanges(); var userlist = context.Users.ToList(); foreach (var u in userlist) { Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password)); }
方法四
手动创建对象,然后放入EF容器中,然后把状态设定为Modified,再把要修改的字段的IsModified属性设置为true,
注意,不需要修改的字段,也要写出来,只是IsModified属性设置为false就可以了,因为如果不把字段列出来,查询时会把这一列更新为Null,我想这不是我们想看到的。
当字段比较多的时候,这种方法还是比较麻烦的
CodeFirstContext context = new CodeFirstContext(); TUsers user = new TUsers(); user.UserId = 0; user.Account = "admin789456"; //user.CreateDate = DateTime.Now; context.Users.Attach(user); //如果不设置,则将修改为null context.Entry(user).State = System.Data.Entity.EntityState.Modified; context.Entry(user).Property("CreateDate").IsModified = false; context.Entry(user).Property("Account").IsModified = true; context.SaveChanges(); var userlist = context.Users.ToList(); foreach (var u in userlist) { Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password)); }