Entity Framework Plus docs 教程 使用文件
阿新 • • 發佈:2020-10-21
內容來自https://github.com/zzzprojects/EntityFramework-Plus
瀏覽器直譯! 僅為了方便如我一樣英文菜鳥參考用 英文好的直接看官方文件和github上的描述即可特徵
批量操作僅適用於實體框架擴充套件
- 散裝儲存變化
- 散裝因特
- 散裝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();
查詢過濾器
var ctx = new EntityContext(); // CREATE filter disabled ctx.Filter<Customer>(CustomEnum.EnumValue, x => x.Where(c => c.IsActive), false); // SELECT * FROM Customer WHERE IsActive = true 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 核心