2010-10-28 56 views
1

我正在刪除基於它的主鍵的實體,然後我使我的存儲庫是通用的。這是我目前的刪除方法:實體框架4:DeleteObject(實體):我需要先檢索這個對象嗎?

public void Del(E entity) // where E : EntityObject on the class 
{ if(entity != null) 
     DC.DeleteObject(entity); 
    return; 
} 

它運行在MVC 2 Web應用程序中。因此,用戶從實體發送主鍵值以刪除,我創建了一個新實體,然後將其發送到Delete方法。這將提取主鍵並使用Where()子句刪除該項目。首先查詢數據庫似乎很愚蠢。

+0

你測試了嗎?如果它沒問題,但使用Where()子句不會添加任何額外的刪除項目的順序,它應該搜索項目。 – 2010-10-28 16:04:40

回答

4

在EF 4上,您不需要查詢要刪除(或更新)的對象,但需要設置主鍵並將其附加到上下文。你的方法是這樣的:

public void Del(E entity) // where E : EntityObject on the class 
{ 
    if(entity != null) 
    { 
     DC.Attach(entity); 
     DC.DeleteObject(entity); 
     DC.SaveChanges(); 
    } 
} 

編輯:

的DeleteObject的方法可以被稱爲在已經刪除的對象。 http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.deleteobject.aspx

+0

如果實體在我們試圖刪除它時不存在,它會簡單地忽略它嗎?假設另一個用戶在我們接觸之前刪除了它?很好回答btw! – 2010-10-28 16:54:12

+0

見編輯..... – Equiso 2010-10-28 17:25:46

+1

請參閱http://blogs.msdn.com/b/alexj/archive/2009/06/19/tip-26-how-to-avoid-database-queries-using-stub- entities.aspx列出了「存根實體」操作 – 2010-10-28 17:30:26

1

您不需要檢索它,但是您需要將做爲將其附加到上下文(如果您沒有)。