Entity Framework Extended Library (EF擴展類庫,支持批量更新、刪除、合併多個查詢等)

https://github.com/loresoft/EntityFramework.Extended git

也能夠在nuget上直接安裝這個包,它的說明有點過期了,最新版本已經改用對IQueryable<T>的擴展,而不是DbSet<T>(已經標記爲棄用),因此跟我同樣有隔離癖好的就能夠大膽使用了。下面介紹如何批量刪除、更新、查詢。 github

批量刪除

原本咱們須要這樣刪除 sql

//EF原生的刪除須要先取出entity而後remove 函數

context.Remove(context.Users.First(u=>u.Key==xxx); code

//若是要刪除更多 ip

foreach(var user in context.Users.Where(u => u.FirstName == "firstname").ToList()) 資源

{ rem

context.Remove(user); get

} it

原本一句sql能夠解決的問題,變得複雜了。

使用ORM是爲了跟sql儘可能的解耦,而且能在編譯時檢查出更多的錯誤,可是上面的寫法讓人堵的慌,若是你也有這種感受下面的寫法是否是就是你腦子裏想要的東西呢。

 
 
----引用EF Extend Libary後刪除只須要一次就完成了,效率高了不少,也不須要太多的鏈接資源,使用更方便了

//delete all users where FirstName matches

context.Users.Delete(u => u.FirstName == "firstname");

//固然若是我這樣寫也能夠

context.Users.Where(...).Delete();

當第一次看到EF EL的時候就被這種寫法吸引住了,這不就是咱們一直找的東西麼。

批量更新

//批量更新用戶名中包含大寫J的用戶設置工資爲999

context.Users.Update(

u => u.Name.Contans("J"),

u2 => new User {Salary = 999});

//第一個參數也能夠傳入已經有的IQuaryable的參數以下

var users = context.Users.Where(u => u.FirstName == "firstname");

context.Users.Update(users, u => new User {FirstName = "newfirstname"});<br><br>//固然了我最喜歡的仍是這樣的寫法<br>context.Users.Where(u => u.FirstName == "firstname").Update(u=>new User{FirstName = "newfirstname"})

  是否是更喜歡這個擴展庫了?我是愛不釋手了,惋惜如今纔開始用。

批量查詢

其實如今的查詢已經很棒了,默認的延遲查詢都能知足基本需求,可是有時候總但願更極致一點,好比現有的查詢沒法知足分頁這個頑固的需求。

//看看EF EL怎麼解決

// 複用的查詢

var q = db.Tasks.Where(t => t.Priority == 2);

// 獲取總數

var q1 = q.FutureCount();

// 獲取分頁的數據

var q2 = q.Skip(pageIndex).Take(pageSize).Future();

// 這裏會觸發上面全部Future函數中的查詢包裝到一個鏈接中執行

int total = q1.Value;

//由於已經獲得結果了,這裏不會再次查詢

var tasks = q2.ToList();

相關文章
相關標籤/搜索