內容來自 https://github.com/zzzprojects/EntityFramework-Plus
瀏覽器直譯! 僅為了方便如我一樣英文菜鳥參考用 英文好的直接看官方文檔和github上的描述即可
其實常用的功能就是批量更新和批量刪除
其他的暫時沒研究
審計功能好像挺6的 還沒仔細研究
特征
批量操作僅適用於實體框架擴展
- 散裝保存變化
- 散裝因特
- 散裝Update
- 布爾凱德萊特
- 散裝
批處理刪除(常用)
刪除單個數據庫往返中的多行,而不在上下文中加載實體。
// using Z.EntityFramework.Plus; // Don't forget to include this. // DELETE all users which has been inactive for 2 years ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) .Delete(); // DELETE using a BatchSize ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) .Delete(x => x.BatchSize = 1000);
支持:EF5、 EF6 、 EF 核心
批處理更新(常用)
使用單個數據庫往返中的表達式更新多行,而不在上下文中加載實體。
// using Z.EntityFramework.Plus; // Don't forget to include this. // UPDATE all users which has been inactive for 2 years ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) .Update(x => new User() { IsSoftDeleted = 1 });
支持:EF5、 EF6 、 EF 核心
查詢緩存
查詢緩存是實體框架的第二級緩存。
查詢的結果從緩存返回。如果查詢尚未緩存,則在返回之前將實現和緩存查詢。
您可以指定緩存策略和緩存標記來控制緩存項過期。
支持:
緩存策略
// The query is cached using default QueryCacheManager options var countries = ctx.Countries.Where(x => x.IsActive).FromCache(); // (EF5 | EF6) The query is cached for 2 hours var states = ctx.States.Where(x => x.IsActive).FromCache(DateTime.Now.AddHours(2)); // (EF7) The query is cached for 2 hours without any activity var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2)}; var states = ctx.States.Where(x => x.IsActive).FromCache(options);
緩存標簽
var states = db.States.Where(x => x.IsActive).FromCache("countries", "states"); var stateCount = db.States.Where(x => x.IsActive).DeferredCount().FromCache("countries", "states"); // Expire all cache entry using the "countries" tag QueryCacheManager.ExpireTag("countries");
支持:EF5、 EF6 、 EF 核心
查詢延遲
推遲執行通常執行的查詢,以允許某些功能,如查詢緩存和查詢未來。
// Oops! The query is already executed, we cannot use Query Cache or Query Future features var count = ctx.Customers.Count(); // Query Cache ctx.Customers.DeferredCount().FromCache(); // Query Future ctx.Customers.DeferredCount().FutureValue();
所有 LINQ 擴展都受支持:計數、第一、第一默認、總和等。
支持:EF5、 EF6 、 EF 核心
查詢過濾器
在全局、實例或查詢級別使用謂詞篩選查詢。
支持:
全局過濾器
// CREATE global filter QueryFilterManager.Filter<Customer>(x => x.Where(c => c.IsActive)); var ctx = new EntityContext(); // TIP: Add this line in EntitiesContext constructor instead QueryFilterManager.InitilizeGlobalFilter(ctx); // SELECT * FROM Customer WHERE IsActive = true var customer = ctx.Customers.ToList();
實例篩選器
var ctx = new EntityContext(); // CREATE filter ctx.Filter<Customer>(x => x.Where(c => c.IsActive)); // SELECT * FROM Customer WHERE IsActive = true var customer = ctx.Customers.ToList();
查詢過濾器
1 var ctx = new EntityContext(); 2 3 // CREATE filter disabled 4 ctx.Filter<Customer>(CustomEnum.EnumValue, x => x.Where(c => c.IsActive), false); 5 6 // SELECT * FROM Customer WHERE IsActive = true 7 var customer = ctx.Customers.Filter(CustomEnum.EnumValue).ToList();
支持:EF5、 EF6 、 EF 核心
查詢未來
查詢未來允許通過在同一 sql 命令中批處理多個查詢來減少數據庫往返。
所有將來的查詢都存儲在掛起的列表中。當第一個將來查詢需要數據庫往返時,所有查詢都在同一 sql 命令中解析,而不是為每個 sql 命令進行數據庫往返。
支持:
未來
// GET the states & countries list var futureCountries = db.Countries.Where(x => x.IsActive).Future(); var futureStates = db.States.Where(x => x.IsActive).Future(); // TRIGGER all pending queries (futureCountries & futureStates) var countries = futureCountries.ToList();
未來價值
// GET the first active customer and the number of avtive customers var futureFirstCustomer = db.Customers.Where(x => x.IsActive).DeferredFirstOrDefault().FutureValue(); var futureCustomerCount = db.Customers.Where(x => x.IsActive).DeferredCount().FutureValue(); // TRIGGER all pending queries (futureFirstCustomer & futureCustomerCount) Customer firstCustomer = futureFirstCustomer.Value;
支持:EF5、 EF6 、 EF 核心
查詢包括篩選器
實體框架已經支持渴望加載,但主要缺點是您無法控制將包含哪些。無法僅加載活動項或僅加載前 10 個注釋。
EF+ 查詢包括使簡單:
var ctx = new EntityContext(); // Load only active comments var posts = ctx.Post.IncludeFilter(x => x.Comments.Where(x => x.IsActive));
支持:EF6
查詢包括優化
通過同時包括和篩選子集合改進 SQL 生成!
var ctx = new EntityContext(); // Load only active comments using an optimized include var posts = ctx.Post.IncludeOptimized(x => x.Comments.Where(x => x.IsActive));
支持:EF5, EF6
審計
允許輕松跟蹤更改、排除/包括實體或屬性以及自動保存數據庫中的審核條目。
支持:
- 自動保存審核
- 排除和包括實體
- 排除和包括屬性
- 格式值
- 忽略事件
- 屬性不變
- 軟添加和軟刪除
// using Z.EntityFramework.Plus; // Don't forget to include this. var ctx = new EntityContext(); // ... ctx changes ... var audit = new Audit(); audit.CreatedBy = "ZZZ Projects"; // Optional ctx.SaveChanges(audit); // Access to all auditing information var entries = audit.Entries; foreach(var entry in entries) { foreach(var property in entry.Properties) { } }
自動保存數據庫中的審核
AuditManager.DefaultConfiguration.AutoSavePreAction = (context, audit) => (context as EntityContext).AuditEntries.AddRange(audit.Entries);
支持:EF5、 EF6 、 EF 核心