EF如何正確的進行實體中修改


本文轉載: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 增刪改

http://www.cnblogs.com/gaobing/p/6001031.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM