EF操作-修改部分字段

20 篇文章 0 订阅
11 篇文章 0 订阅

在做项目的时候,肯定会用到更新数据库中的某条记录,而更新的时候,往往是更新数据库中的某几个字段,而不是全部字段,在此我们假设一个实体(TUsers)有如下字段:UserId,Account,Password,CreateDate,其中UserId是主键,自动增长。
修改方式一(修改全部字段)会比较麻烦

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));
            }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值