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 核心