EF刪除和修改數據只能先從數據庫取出,然后再進行刪除
delete from Table1 where Id>5;
update Table1 set Age=10;
我們需要這樣操作
//刪除 var t1 = context.Table1.Where(t => t.Id > 5).ToList(); foreach(var t in t1) { context.Table1.Remove(t); } context.SaveChange(); //更新 var t1 = context.Table1.ToList(); foreach(var t in t1) { t.Age = 10; } context.SaveChange();
在github中提供了一個EF擴展庫,支持批量操作,不用先查詢出來,然后逐個刪除
https://github.com/loresoft/EntityFramework.Extended
在VS可以直接通過NuGet安裝(因為我EF是5.0的,所以加上版本號,現在出到6了)
PM> Install-Package EntityFramework.Extended -Version 5.0.0.73
安裝完成后
//刪除 context.Table1.Delete(u => u.Id > 5); context.SaveChange(); //更新 context.Table1.Update(u => u.Id > 5, u => new Table1 { Age = 10 }); context.SaveChange();
擴展庫還支持批量查詢功能
例如:在分頁查詢的時候,需要查詢結果數,和結果集
EF做法:
var q = container.Users.Where(u => u.Name.StartsWith("a")); //查詢2次 var count = q.Count(); var data = q.Skip(10).Take(10).ToList();
EF擴展庫的做法
var q = context.Table1.Where(t => t.Name.StartsWith("a")); var q1 = q.FutureCount(); var q2 = q.Skip(10).Take(10).Future(); //一次查詢 var data = q2.ToList(); var count = q1.Value;
擴展庫還支持查詢緩存功能
var users = container.Users.Where(u => u.Id > 5).FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(10)));
如果在10秒內重復查詢,則會從緩存中讀取,不會查詢數據庫