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


今天乍一看,園子里居然沒有關於這個類庫的文章,實在是意外畢竟已經有很多介紹EF使用的文章了。

E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended

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

批量刪除

本來我們需要這樣刪除

//EF原生的刪除需要先取出entity然后remove
context.Remove(context.Users.First(u=>u.Key==xxx);
//如果要刪除更多
foreach(var user in context.Users.Where(u => u.FirstName == "firstname").ToList())
{
context.Remove(user);
}

本來一句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"});

//當然了我最喜歡的還是這樣的寫法
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();

 -------------------------------------------------------------------------------------------------------------------------------------------------

編輯於20160607

有段時間沒用csharp了,上面寫的是剛用efe時的筆記,一直沒有回復大家很抱歉。

  1. efe不支持mysql;
  2. 不建議吞吐大的用ef,如果吞吐大的業務有限的話可以獨立出來做;

 


免責聲明!

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



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