前言
在 Entity Framework 簡單查詢操作 中主要是學習了在Entity Framework中的幾種不同模式的查詢操作,現在主要來學習一下簡單的增加、刪除、修改操作。
增加
在EF中添加操作一般有兩種方式:一是直接創建對象,然后調用“DbSet”的”Add()”方法進行添加;二是調用數據庫上下文的”Entry()”方法並設置對應的狀態。無論使用哪種方式最終一定要調用“SaveChange()”進行提交。如:
using (var db = new EFContext()) { var stephen = new Person { PersonName="aehyok0001", Age=25, Address="深圳南山", Email="aehyok@163.com" }; db.Persons.Add(stephen); var jeffrey = new Person { PersonName = "aehyok0002", Age = 25, Address = "深圳寶安", Email = "Leo@163.com" }; db.Entry(jeffrey).State = EntityState.Added; db.SaveChanges(); }
執行后效果如下

此外,在含有導航屬性時,將一個對象賦值給另一個對象的導航屬性也能達到添加的效果(當導航屬性為”DbSet“集合時通過調用導航屬性的“Add()“方法也同樣可以達到添加效果)。
狀態跟蹤
在這里我們需要強調一點那就是狀態跟蹤,對於上面的操作如果我們調用“Attach()”方法對實體進行跟蹤或者設置實體的狀態那么數據將不會保存到數據庫:

這兩句添加任何一句效果都是一樣的,就是都沒有保存到數據庫中。
使用”Attach()”方法進行實體跟蹤時會設置實體的狀態為“Unchanged”此時實體處於未修改狀態,當執行“SaveChange()”方法時EF不會執行修改操作。相反如果此時設置實體狀態為“Modified”則EF執行更新操作。那么既然EF的數據修改操作(增加、更新、刪除)是根據實體狀態而進行的,那么為什么之前我們的增加操作能正常進行而不用手動修改其狀態呢?原因是EF會自動發現狀態改變,在調用下面的方法時狀態發現是自動的:

當然,並不是所有的時候我們都需要EF自動發現狀態改變,設置 “DbContext.Configuration.AutoDetectChangesEnabled”屬性為“false”可以禁用自動發現功能。
刪除
現在來看一下Entity Framework的刪除操作
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 4).FirstOrDefault(); db.Persons.Remove(person); db.SaveChanges(); }
當然有了上面狀態跟蹤的討論相信大家也可以想到如下刪除方法:
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 5).FirstOrDefault(); db.Entry(person).State = EntityState.Deleted; db.SaveChanges(); }
上面兩種方法都會達到刪除的目的。
修改
修改數據很簡單,直接修改對應的屬性即可:
using (var db = new EFContext()) { var person = db.Persons.Where(m => m.PersonId == 3).FirstOrDefault(); person.PersonName="UpdateNewName"; db.SaveChanges(); }
需要說明的是,EF在執行修改操作前會檢查哪些屬性發生了變化,並且只會修改發生變化的字段。
