EFcore好用组件 Entity Framework Plus docs 教程 使用文档

内容来自  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 核心

posted @ 2020-10-21 21:18  ToLing·  阅读(1214)  评论(0编辑  收藏  举报