EF擴展庫(批量操作)


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秒內重復查詢,則會從緩存中讀取,不會查詢數據庫

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM