最新回應

之前分享過 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)




 


 

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

 


DotBlogs Tags: ADO.NET ADO.Net Entity Framework ASP.NET C# Linq to Entities

關連文章

ADO.Net Entity Framework : (十八) 介紹 EF 提供的三種查詢方式

ADO.Net Entity Framework : (十七) 深入探討,如何對中斷物件執行變更

ADO.Net Entity Framework : (十五) 深入探討,物件間傳遞,以及EntityKey、EntityState

ADO.Net Entity Framework : (十四) 關聯式資料 - 修改

ADO.Net Entity Framework : (十二) 長時間執行設定方式

ADO.Net Entity Framework : (十一) 關聯式資料 - 查詢

ADO.Net Entity Framework : (九) 推薦學習EF必備工具 EFQuerySamples

ADO.Net Entity Framework : (八) 查詢時使用 ”IN” 的方式

ADO.Net Entity Framework : (六) 透過 .edmx 修改SQL版本

ADO.Net Entity Framework : (五) 從SqlConnection物件建立EntityConnection物件

回應

  • # re: ADO.Net Entity Framework : (十六) 關聯式資料 - 刪除 by Howard

    您好:我想請問一下,若Group有一個sub class,那刪除時要如何load subclass呢?

    u.Group.oftype<subclass>().load();
    無此用法。若只是load Group似乎也不對。

    墾請賜教,謝謝^^

    2010/1/14 上午 10:04 | 回覆

  • # re: ADO.Net Entity Framework : (十六) 關聯式資料 - 刪除 by david

    to Howard :
    在載入關連的資料時,除了u.Group.Load()之外,也可以在 取得資料時,利用te.User.Include("Group").Include("Group.subclass").Where(a => a.User_name == "David").First(); ,
    你可以試試看,不知道有沒有幫助~~ ^_^

    2010/1/14 下午 03:07 | 回覆

  • # re: ADO.Net Entity Framework : (十六) 關聯式資料 - 刪除 by lastsecret

    你好:

      請問一下我照您教說明的程式碼去做刪除動作,可是還是一直出現錯誤訊息。是我哪裡寫錯了嗎?

    錯誤訊息----

    The relationship could not be changed because one or more of the foreign-key properties is non-nullable

    Code-----

     Member member = db.Members.Where(p=>p.MemberName.Equals("Alex")).FirstOrDefault();
    member.Orders.Load();
    db.DeleteObject(member);
    db.SaveChanges();

     

    Table-----

    Members  ---ID(Guid,PK)、MemberName(string)

    Orders --ID(Guid,PK)、Date(datetime)、MembersId(Guid,FK)

    全都不能為空值

    2010/3/17 下午 03:33 | 回覆

登入後使用進階評論

Please add 5 and 7 and type the answer here: