1. 程式人生 > 實用技巧 >Entity Framework Plus docs 教程 使用文件

Entity Framework Plus docs 教程 使用文件

內容來自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 核心