ENTITY FRAMEWORK CORE入門:四、DbSet.Attach(實體)與DbContext.Entry(實體).State = EntityState.Modified 區別

當你使用這個DbSet.Update方法時,實體框架將你實體的所有屬性標記爲EntityState.Modified,所以跟蹤它們。如果你只想更改部分屬性,而不是全部屬性,請使用DbSet.Attach

首先看一下我們province表中的數據。

方式一,使用Attach更新某個屬性的值(注意,不是所有的屬性都作修改)

緊接着上一節的內容,我們在HomeController中添加修改代碼,看下DbSet.Attach(實體)所做的修改。

//四、DbSet.Attach(實體)與DbContext.Entry(實體).State = EntityState.Modified 區別
           
 //DbSet.Attach(實體)
            var proAttach = _context.Provinces.Where(p => p.Name == "上海").FirstOrDefault();
            if (proAttach != null)
            {
                proAttach.Population = 10;
                _context.Provinces.Attach(proAttach);
            }
            _context.SaveChanges();
            

我們看一下局部變量是啥,更新語句是什麼,只有Population屬性被修改。

數據庫達到預期的變化:Population變成10了。

 

接下來,看一下DbContext.Entry(實體).State = EntityState.Modified操作的變化

頁面頭首先添加引用using Microsoft.EntityFrameworkCore;

//DbContext.Entry(實體).State = EntityState.Modified操作
            var proAttach = _context.Provinces.Where(p => p.Name == "上海").FirstOrDefault();
            if (proAttach != null)
            {
                proAttach.Population = 20;
                _context.Entry(proAttach).State = EntityState.Modified;
            }
            _context.SaveChanges();

我們看一下更新語句,除了ID外的所有屬性都被修改。

我們看下數據庫的變化,達到預期的效果:Name爲“上海”的數據行的population屬性值變成20。

看來這2個語句應該是使用DbSet.Attach(實體)來更新個別數據,效率和開銷上更優吧!初級教程就這麼多了,歡迎大神們批評指正,也感謝很多被借鑑的文章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章