2011-01-09 14 views
18

在LINQ to SQL,我可以這樣做:實體框架刪除所有對提交

context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId)); 

請告訴我相當於本作實體框架?

+0

重複http://stackoverflow.com/問題/ 869209/bulk-deletion-in-linq-to-entities?lq = 1 – surfen 2012-06-12 20:48:25

回答

5

@Femaref看法是正確的,但對於一個真正的模擬到L2E的DeleteAllOnSubmit,你會希望你的擴展方法來使枚舉,這樣你就不會被「收集修改之前被刪除的實體副本同時列舉「例外。

public static void DeleteAllObjects<TEntity>(this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class { 
    foreach(var entity in data.ToList()) //data.ToList() makes a copy of data for safe enumeration 
     set.DeleteObject(entity); 
} 
24
foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId)) 
{ 
    context.User_Roles.DeleteObject(entity); 
} 
context.SaveChanges(); 

當然,你可以寫一個擴展方法,它將封裝這個。

這將是這樣的:

public static void DeleteObjects<TEntity> (this ObjectSet<TEntity> set, IEnumerable<TEntity> data) where TEntity : class 
{ 
    foreach(var entity in data) 
    set.DeleteObject(entity); 
} 

調用,如:

context.User_Roles.DeleteObjects(context.User_Roles.Where(ur => ur.UserId == user.UserId)) 
context.SaveChanges(); 
+1

+1:我只是在寫這個代碼。 – 2011-01-09 19:35:16

+0

你可能會遇到這個問題使用這種方法,這應該有所幫助:http://stackoverflow.com/a/3742340/183174 – LostNomad311 2011-12-14 19:36:11

+0

@ nomad311你提到的問題是什麼exacly? – surfen 2011-12-30 00:51:56

2
foreach(var entity in context.User_Roles.Where(ur => ur.UserId == user.UserId)) 
{ 
    context.User_Roles.DeleteObject(entity); 
} 
context.SaveChanges(); 
當然

,該解決方案可以工作。但是,這是最低效的解決方案。 該解決方案將爲每條記錄(實體)生成一條刪除SQL命令。 想要在2000年之前刪除所有數據的圖像。數據庫中有超過1,000,000條記錄。如果以這種方式刪除這些對象,超過1,000,000個SQL命令將被髮送到服務器,這是一個不必要的大浪費。 什麼

0

實體框架中沒有RemoveAll等價物,因此您可以在內存中加載實體並使用DeleteObject方法逐個刪除它們。

您可以使用Linq:context.MyEntitie.RemoveAll(context.MyEntitie);

0

使用EntityFramework.Extensions
1)首先安裝使用的NuGet

2 EntityFramework.Extensions)下面是LINQ2SQL的DeleteAllOnSubmit()類似的代碼:的

using EntityFramework.Extensions; 

.... 
public void DeleteAllUsers(User_Role user){ 
    context.User_Roles.Delete(ur => ur.UserId == user.UserId); 
    context.SaveChanges(); 
} 
...