在LINQ to SQL,我可以這樣做:實體框架刪除所有對提交
context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));
請告訴我相當於本作實體框架?
在LINQ to SQL,我可以這樣做:實體框架刪除所有對提交
context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));
請告訴我相當於本作實體框架?
@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);
}
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:我只是在寫這個代碼。 – 2011-01-09 19:35:16
你可能會遇到這個問題使用這種方法,這應該有所幫助:http://stackoverflow.com/a/3742340/183174 – LostNomad311 2011-12-14 19:36:11
@ nomad311你提到的問題是什麼exacly? – surfen 2011-12-30 00:51:56
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命令將被髮送到服務器,這是一個不必要的大浪費。 什麼
實體框架中沒有RemoveAll等價物,因此您可以在內存中加載實體並使用DeleteObject方法逐個刪除它們。
您可以使用Linq:context.MyEntitie.RemoveAll(context.MyEntitie);
使用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();
}
...
重複http://stackoverflow.com/問題/ 869209/bulk-deletion-in-linq-to-entities?lq = 1 – surfen 2012-06-12 20:48:25