2011-03-29 114 views
3

我正在使用Entity Framework以及默認的ASP.NET Membership服務。我還有第三張「資料信息」表。我認爲EF會照顧所有內部,但事實並非如此。當我嘗試通過轉到像http://localhost:19506/User/Delete/SomeGUIDhere這樣的URL來刪除用戶時,我收到了一些令人討厭的錯誤,這些錯誤與存在外鍵約束的事實相關。如何刪除與「用戶」關聯的所有記錄?

如何管理這些類型的依賴關係?不得不跟蹤這一切,這一切都打敗了EF的目的,所以我猜測我錯過了一些小事。

編輯包括一些我正在工作的代碼。我仍然想知道是否有比以下更好的方法。似乎很快就會失去控制,很多外鍵依賴項都在浮動。

public void DeleteUser(User u) 
{ 
    db.Profiles.DeleteObject(u.Profile); 
    db.aspnet_Membership.DeleteObject(u.aspnet_Membership); 
    db.Users.DeleteObject(u); 
    db.SaveChanges(); 
} 

回答

2

如何管理這些類型的依賴關係爲 ?不得不跟蹤它 所有類型的失敗EF 的目的,所以我猜我缺少的東西 未成年人。

可惜這仍然是一個手動過程,以及雙重作爲@Danny Varod指出:

  1. 在你的數據庫,假設外鍵關係已經建立,確保了條件「選擇刪除 - >級聯」。您可以在SQL Server Management Studio中更改它。

  2. 在你的EF實體模型中,你也應該在關係上指定這個選項。爲此,只需選擇表示關係的實體之間的虛線。在屬性中,您將看到「級聯刪除」的適當選項 - 您應該選擇具有而不是*的End的刪除。

enter image description here

+0

看起來很簡單。在你的屏幕截圖中,突出顯示的部分是否意味着當你刪除一篇文章時,其所有相關的評論都會隨之發佈?在我的問題中,我有1:1的用戶:個人資料。當我刪除一個用戶時,我希望該配置文件也可以使用,但是如果用戶沒有被刪除,我不希望能夠意外刪除配置文件。 – Pete 2011-03-29 01:51:14

+0

@Pete:是的,你的陳述是正確的 - 實際上檢查這個問題 - 假設你在做數據庫,首先EF應該從數據庫中選擇級聯刪除 - 確保你在那裏設置了設置,從你的模型中刪除實體,並通過「從數據庫更新」重新添加它 - 它應該添加級聯刪除然後 - 請在您的模型之後再確認。另請查閱這篇文章:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx – BrokenGlass 2011-03-29 02:29:10

1

級聯刪除概念模型(和db)的關係。

+0

如果我知道如何利用級聯的刪除與我的實體模型和數據庫,我也不會張貼的問題。你是否至少有一些僞代碼可以重寫我的代碼,而不必擔心依賴關係? – Pete 2011-03-29 01:13:11

+1

我相信你可以改變關係,並將刪除類型設置爲casacade – 2011-03-29 01:40:23

+0

在edmx設計中,選擇關係,在屬性toolwindow中,將End1/2在Delete上更改爲Cascade。 – 2011-03-29 14:19:42

相關問題