Entity Framework Plus: 让 EF Core 开发如虎添翼
EF Core介绍
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 的现代对象数据库映射器。它支持 LINQ 查询、更改跟踪、更新和架构迁移。EF Core 通过提供程序插件 API 与 SQL Server、Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他数据库一起使用(微软官方出品)。
Entity Framework Plus
Entity Framework Plus是一个开源、免费(MIT License)、功能强大的 Entity Framework(EF)和 Entity Framework Core(EF Core) 扩展库,旨在提升 Entity Framework 的性能和克服其局限性。通过提供一系列实用的功能,如批量操作、查询缓存、查询延迟、LINQ动态、审计跟踪等,使得使用 Entity Framework 进行数据库开发变得更加高效和灵活。
项目功能特性
以下是 Entity Framework Plus 项目的一些主要特点和功能:
批量操作:支持批量插入、更新、删除和合并操作,这些操作可以在单个数据库往返中处理多条记录,而无需加载实体到内存中,从而显著提高性能。
查询缓存:提供查询缓存功能,允许将查询结果缓存在内存中,以减少对数据库的重复查询,提高应用程序的响应速度。
查询延迟:允许延迟查询的执行,以便在需要时结合其他功能(如查询缓存和查询未来)一起执行。
查询过滤:支持在全局、实例或查询级别上应用过滤条件,以便在检索数据时自动应用这些条件。
查询未来:允许将多个查询合并到单个数据库往返中,从而减少数据库往返次数,提高性能。
查询包含优化:改进了 Include 方法的行为,允许在加载关联实体时应用过滤条件,从而优化生成的 SQL 语句。
审计跟踪:提供审计跟踪功能,允许自动跟踪对实体的更改,并将审计信息保存到数据库中。
支持多个版本的 Entity Framework:
EntityFramework-Plus支持 Entity Framework 5(EF5)、Entity Framework 6(EF6)和 Entity Framework Core(EF Core)。易于集成:通过 NuGet 包管理器可以轻松地将
EntityFramework-Plus集成到现有的 Entity Framework 或 Entity Framework Core 项目中。

项目NuGet包安装
NuGet包管理器中搜索:Z.EntityFramework.Plus.EFCore包进行安装。

批量删除
如果需要删除成百上千个实体,使用Entity Framework Core进行删除可能会非常慢。实体在被删除之前首先加载到上下文中,这对性能非常不利,然后,它们被一个接一个地删除,这使得删除操作变得更糟。
var ctx = new EntitiesContext();
// 删除所有2年不活动的用户
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Delete();
// 使用BatchSize删除
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Delete(x => x.BatchSize = 1000);
批量更新
如果需要更新具有相同表达式的数百或数千个实体,则使用Entity Framework Core进行更新可能会非常慢。实体在更新之前首先加载到上下文中,这对性能非常不利,然后,它们一个接一个地更新,这使得更新操作变得更糟。
var ctx = new EntitiesContext();
// 更新所有用户2年不活动
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Update(x => new User() { IsSoftDeleted = 1 });
查询过滤器
全局过滤器
// 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();
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
- 开源地址:https://github.com/zzzprojects/EntityFramework-Plus
- 在线文档:https://entityframework-plus.net
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没)。
- GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
- Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
Entity Framework Plus: 让 EF Core 开发如虎添翼的更多相关文章
- 《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版
前言 到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的 ...
- 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...
- Oracle中使用Entity Framework 6.x Code-First方式开发
去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using ...
- EF是啥?【What is Entity Framework?】(EF基础系列2)
EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...
- 使用Entity Framework 4进行代码优先开发
[原文地址]Code-First Development with Entity Framework 4 .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...
- 【Basics of Entity Framework】【EF基础系列1】
EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...
- Entity Framework Code First ---EF Power Tool MySql
关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...
- 如何使用ASP.NET Web API OData在Oracle中使用Entity Framework 6.x Code-First方式开发 OData V4 Service
环境: Visual Studio 2013 + .Net Framework 4.5.2 1.新建项目 2.安装OData,ODP.NET 安装的包: 下面是部分代码: using System; ...
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...
- EF Core开发模式之Code First
Code First顾名思义,代码为先.首先编写完相关的实体类及DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建. 本例中创建一个班级和学生的管理,主要有班级类MyClass ...
随机推荐
- Modbus转Profinet网关模块连PLC与流量计通讯案例
一.案例背景 在饮品加工厂中,会涉及到流量计的使用,然而达到对流量计的精准控制和数据采集需要用到PLC,由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus),造成两者不能自接进 ...
- 【jQuery学习日记】从入门到再入门
1,jQuery介绍 jQuery 是一个 JavaScript 库. jQuery 极大地简化了 JavaScript 编程. 2,入门jQuery jQuery有两大核心:jQuery核心函数和j ...
- java面试一日一题:讲下mysql中的锁
问题:请讲下在mysql中的锁 分析:该问题主要考察对中锁的掌握,主要考察的是读.写锁.行锁.间隙锁.next-key,其他还有表锁.意向锁 回答要点: 主要从以下几点去考虑, 1.mysql中的锁有 ...
- hbuilderx+香蕉云编生成ios证书和上架教程
现在很多公司都使用uniapp作为底层框架来开发app应用,而uniapp的开发工具hbuilderx云打包的时候,需要证书和证书profile文件. 假如是ios应用,则还需要上架到appstore ...
- docker 概念,安装,启动,运行
docker概念,安装,启动,运行模式 docker的概念 镜像(image) 模板,可以通过模板来创建容器服务,tomcat镜像===>run==>tomacat01容器(提供服务),通 ...
- python raise异常处理
python raise异常处理 一般最简单的异常处理是try except: try: f = open('test.txt') except Exception as e: print(e) f ...
- 对比python学julia(第一章)--(第五节)八十天环游地球
5.1. 问题描述 <八十天环游地球>是法国作家儒勒·凡尔纳创作的一部长篇小说,讲述了这样一个神奇的故事. 在1872年的伦敦,英国绅士福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地 ...
- 【Vue】Re08 模块化
一.JS的演变: 1.简单的页面控制,改变HTML标签和CSS样式 2.AJAX异步请求,控制前后数据传输问题 3.更强大的功能,几乎依赖JS实现 工程管理问题: 简单页面只需要在页面嵌入script ...
- .Net内存管理释放的两种方式
在.Net中,资源回收主要是指内存管理和非托管资源的释放.分别提供了两种主要的方式进行处理: 垃圾回收(GC) 确认性资源释放(DRD) 官网相关文档的链接:https://learn.microso ...
- Git的分支管理和标签操作
分支操作 分支是Git使用过程中非常重要的概念.使用分支意味着你可以把你的工作从开发主线上分离出来,以免影响开发主线. 同意一个仓库可以有多个分支,各个分支相互独立,互不干扰.通过git init 命 ...