1. 程式人生 > >EF實體中的資料修改更新

EF實體中的資料修改更新

說到現在才進入正題,那我們怎麼來進行修改呢?

不推薦方式一:

思路:先從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();
}