天天看點

EF操作-修改部分字段

在做項目的時候,肯定會用到更新資料庫中的某條記錄,而更新的時候,往往是更新資料庫中的某幾個字段,而不是全部字段,在此我們假設一個實體(TUsers)有如下字段:UserId,Account,Password,CreateDate,其中UserId是主鍵,自動增長。

修改方式一(修改全部字段)會比較麻煩

CodeFirstContext context = new CodeFirstContext();
            TUsers user = new TUsers();
            user.UserId = ;
            user.Account = "administrator";
            user.Password = "456";
            user.CreateDate = DateTime.Now.AddYears(-);
            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 == ).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 = ;
            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 = ;
            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));
            }