ADO.Net Entity Framework : (十六) 關聯式資料 - 刪除

ADO.Net Entity Framework : (十六) 關聯式資料 - 刪除

之前分享過 ADO.Net Entity Framework 在處理關聯式資料的新增、修改、查詢,
剩下最後一個部份刪除,

一樣先來看 ER-Model

2009-10-12_122043
 

需求是要刪除使用者(User)資料,
來看看範例

範例一

        ////範例   刪除 David 的資料
        using (TestEntities te = new TestEntities())
        {            
            ////先取得 David 的資料
            var u = te.User.Where(a => a.User_name == "David").First();            

            ////刪除 David
            te.DeleteObject(u);
            
            ////儲存變更
            te.SaveChanges();
        }

 

這段語法看起來正常,但是一執行卻發生
 

'/ADOEntityFrameworkDemo' 應用程式中發生伺服器錯誤。

The DELETE statement conflicted with the REFERENCE constraint "FK_UserGroup_User". The conflict occurred in database "Test", table "dbo.UserGroup", column 'UserGroup_userid'.
The statement has been terminated.

描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。
例外詳細資訊: System.Data.SqlClient.SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_UserGroup_User". The conflict occurred in database "Test", table "dbo.UserGroup", column 'UserGroup_userid'.
The statement has been terminated.

@@  原來是因為還有 Reference ,
再把語法修改一下

範例二

        ////範例   刪除 David 的資料
        using (TestEntities te = new TestEntities())
        {
            ////先取得 David 的資料
            var u = te.User.Where(a => a.User_name == "David").First();
                       
            ////ADO.Net Framework 在刪除的時候,會連帶一起刪除關連的資料            
            ////但是必須先載入關連的資料
            u.Group.Load();
            u.UserDepartmentReference.Load();

            ////刪除 David
            te.DeleteObject(u);

            ////儲存變更
            te.SaveChanges();
        }

這段語法就可以順利執行囉

說明一下,ADO.Net Entity Framework 在處理關聯式資料的時候,會把相關的所有資料一起刪除,
但是前提是在刪除前,必須先使用【Load】方法,把相關聯資料載入

 

相關資料
ADO.Net Entity Framework : (十四) 關聯式資料 - 修改
ADO.Net Entity Framework : (十三) 關聯式資料 - 新增
ADO.Net Entity Framework : (十一) 關聯式資料 - 查詢
ADO.Net Entity Framework : (十) 關聯式資料搭配Gridview或ListView小技巧

參考連結
HOW TO:變更物件之間的關聯性 (Entity Framework)




 


 

  • 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的""給予支持,非常感激
  • 歡迎轉載,但請註明出處
  • 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝