EF實體中的資料修改更新
阿新 • • 發佈:2019-02-11
說到現在才進入正題,那我們怎麼來進行修改呢?
不推薦方式一:
思路:先從ObjectContext取出實體,然後將前臺傳過來的DTO屬性對應賦值到我們的實體上,然後呼叫ObjectContext的保證修改方法。
但是這種方式是最不提倡的,因為這樣每次修改前都得先將資料查出來,經過SqlProfiler追蹤,這麼一個操作要對資料庫進行兩次的連線。這是不可忍受的!
推薦方式二:
思路:無需先查出實體,因為我們知道EF通過 ObjectStateManage來控制新增、修改、刪除佇列以及實體的狀態,我們所有可以通過在直接將DTO轉化成實體,然後將實體對應的佇列中,並 且我們手動的將實體的狀態處理好,再呼叫ObjectContext的保證修改方法,這樣就避免了先查詢後修改,兩次資料庫連線的問題了。例項程式碼如下:
static void Main(string[] args) { SchoolDBEntities schoolDB = new SchoolDBEntities(); //假設:網路傳一個StudentDTO過來 ,將此DTO轉化成 資料庫實體 Student student = new Student(); student.Id = 1;// 假設DTO傳過來的值,主鍵必須存在,不然會報錯的 student.Address = "北京上地1"; student.Name = "飛龍1"; student.Phone = "1101"; //先將實體附加到實體上下文中 schoolDB.Student.Attach(student); //手動修改實體的狀態 schoolDB.ObjectStateManager.ChangeObjectState(student, EntityState.Modified); //儲存回資料庫 schoolDB.SaveChanges(); }