2009-11-23 102 views
11

我讀到新的實體框架將包括一個方法來刪除多個項目(Linq到SQL有DeleteAllOnSubmit()),但我找不到函數/方法來做到這一點。實體框架4多個對象刪除(RemoveAll)

這是在測試版2還是我必須做我自己的?

UPDATE:

這是我現在使用什麼:

public void DeleteObjects(IEnumerable<object> objects) 
    { 
     foreach (object o in objects) 
     { 
      DeleteObject(o); 
     } 
     SaveChanges(); 
    } 
+1

[批量刪除在LINQ to Entities]可能的重複(http://stackoverflow.com/questions/869209/bulk-deleting-in-linq-to-entities) – 2012-01-15 23:30:38

回答

8

EF 4可以讓你對一個對象上下文中執行TSQL語句:

using (var context = new EntityFrameworkExampleEntities()) 
    {  
    var count = 
     context.ExecuteStoreCommand(@"DELETE FROM Companies WHERE [CompanyID]=4");    
    } 

請參見下面的博客瞭解詳情。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework-4.aspx

+0

有沒有我的功能缺點? – Omar 2009-11-29 22:57:33

+2

缺點是在移除過程中,所有對象都會保留在內存中。如果您想刪除尚未從數據庫加載的大量對象,則它們將在刪除之前全部加載到應用程序中。 – 2010-10-22 11:26:37

+1

Ick。要引用您鏈接到的文章,「只有在實體框架不支持 某些您需要的情況下才應使用此功能 」。 EF支持刪除多個對象,調用DeleteObject()和SaveChanges()(或者執行http://stackoverflow.com/a/870081/24267)。 – mhenry1384 2012-10-08 21:03:28

0

我知道這是晚了,但我發現這個職位,並發現了一個簡單的解決方案,這是不貼。 您可以在關聯屬性中將OnDelete設置爲Cascade。在VS2012中打開edmx文件。點擊關聯,你會在Properties選項卡中找到OnDelete。然後,您可以使用Remove()方法而不使用觸發器或任何其他特殊處理。