前言
在原生的EF框架中,針對批量數據操作的接口有限,EF擴展框架彌補了EF在批量操作時的接口,這些批量操作包括:批量修改、批量查詢、批量刪除和數據緩存,如果您想在EF中更方便的批量操作數據,這個擴展將對您來說很有用。
下載安裝
這個框架支持通過NuGet包管理器進行安裝,你可以在包管理器中搜索:EntityFramework.Extended,最簡單的方法就是程序包管理控制台進行安裝,安裝命令如下:
PM > Install - Package EntityFramework.Extended
框架安裝后,你需要在您的類中是引用如下命名空間:
using EntityFramework.Extensions;
批量更新與刪除數據
在EF中默認提供的更新和刪除操作,你必須首先將數據查詢到內存中,這在有些時候,性能是非常差的,而通過EntityFramework.Extended你只需要通過LINQ生成表達式即可直接批量刪除或更新,示例代碼如下:
MyContext context = newMyContext(); context.Books.Where(b => b.Price >= 100).Delete(); context.SaveChanges();
以上示例演示批量刪除圖書價格大於等於100的所有記錄
1
2
3
|
MyContext context = newMyContext();
context.Books.Where(b => b.Price >= 100).Update(b => newBook { Price = 88 });
context.SaveChanges();
|
以上示例演示將圖書價格大於100所有記錄的價格修改成88元
批量查詢
這個擴展框架允許你將多個查詢表達式包裝在同一個連接進行查詢,這樣可以減少數據庫連接數,從而提高查詢性能,示例如下:
MyContext context = newMyContext(); var books = context.Books.Where(b => b.Price >= 100).Future(); //生成第一個查詢表達式 var accounts = context.Accounts.Where(a => a.Money <= 10).Future(); //生成第二個查詢表達式 var bookList = books.ToList(); //在同一個數據庫連接上查詢上面兩個表達式,只訪問一次數據庫
在分頁的時候,我們經常需要知道分頁列表與總記錄數,如果你用默認EF提供的方法進行查詢,你需要訪問兩次數據庫,在EF擴展框架中,您可以將獲得列表與總記錄數的查詢包裝在同一個數據庫連接上進行,示例如下:
MyContext context = newMyContext(); var query = context.Books.Where(b => b.Price >= 100); var query1 = query.Skip(pageIndex).Take(pageSize).Future(); var query2 = query.FutureCount(); var bookList = query1.ToList(); var bookTotalCount = query2.Value;
緩存查詢結果
EF擴展框架允許緩存查詢結果,用法示例如下:
MyContext context = newMyContext(); var books = context.Books.Where(b => b.Price >= 100).FromCache(); //不指定時間,使用默認的緩存時間 var books2= context.Books.Where(b => b.Price >= 100).FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(300))); //將結果緩存300秒
當然,您也可以給緩存打上TAG標記,標記緩存的好處是,在以后的查詢中可以設置指定的緩存過期或者獲取指定TAG所緩存的數據,示例如下:
MyContext context = newMyContext(); var books = context.Books.Where(b => b.Price >= 100).FromCache(tags: new[] { "Books","100" }); CacheManager.Current.Expire("Books"); //將標記為Books的緩存立即過期
值得注意的是,EF擴展框架默認使用MemoryCache系統內存進行緩存,如果您想第三方分布式緩存框架,只需要移除系統內存緩存,注入自己的緩存提供者即可,如下用Memcache緩存結果。
Locator.Current.Register<ICacheProvider>(() => new MemcachedProvider());
以上就是EntityFramework.Extended擴展庫的所有內容,來自零度分享。
http://www.xcode.me/book/entity-framework-extended