本文轉載:http://www.cnblogs.com/Ruiky/archive/2012/12/29/2839011.html
不推薦方式一:
思路:先從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(); }
EF直接更新數據(不需查詢)
http://jameszou.blog.51cto.com/2173852/1152743/
EF 增刪改