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 FrameworkEntityFramework-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 开发如虎添翼的更多相关文章

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》书籍出版

    前言 到目前为止写过刚好两百来篇博客,看过我博客的读者应该大概知道我每一篇博客都沿袭着一贯的套路,从前言到话题最终到总结,本文依然是一如既往的套路,但是不是介绍技术,也可说是介绍技术,不过是介绍书中的 ...

  2. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  3. Oracle中使用Entity Framework 6.x Code-First方式开发

    去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using ...

  4. EF是啥?【What is Entity Framework?】(EF基础系列2)

    EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...

  5. 使用Entity Framework 4进行代码优先开发

    [原文地址]Code-First Development with Entity Framework 4   .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...

  6. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  7. Entity Framework Code First ---EF Power Tool MySql

    关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...

  8. 如何使用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; ...

  9. Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题

    关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...

  10. EF Core开发模式之Code First

    Code First顾名思义,代码为先.首先编写完相关的实体类及DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建. 本例中创建一个班级和学生的管理,主要有班级类MyClass ...

随机推荐

  1. SpringCloud 微服务简介

    一.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 1.单体架构:将业务的所有功能集中在一个项目中开发,打成一 ...

  2. el-config-provider

    el-config-provider是Element Plus库中的一个组件,用于提供全局的配置.它是Element Plus在2.0版本中引入的新组件. el-config-provider组件的作 ...

  3. 分析C语言程序

    1 #include <stdio.h> 2 int main() 3 { 4 puts("C语言"); 5 return 0; 6 } 函数的概念 C语言提供了很多功 ...

  4. java spring boot 2 开发实战 mybtis 基础部份从搭建到第一个完整测试(从环境到测试用例二部份)

    本案例是java  sping boot  2.2.1 mybtis 基础部份 第一步搭建环境:安装依赖 由于我们公司项目是1.8 环境不能乱,我现在自己的电脑是1.8环境,所以本次整理的boot 代 ...

  5. 错误记录java: JDK isn't specified for module

    跑苍穹外卖的时候遇到了 java: JDK isn't specified for module 'sky-pojo'这一问题 解决办法是通过修改JDK版本,这个项目用的springboot比较早,可 ...

  6. Redis持久化RDB与AOF介绍

    就是将内存中的数据通过rdb/aof进行持久化写入硬盘中 rdb就是进行持久化的快照 在指定的时间间隔内,执行数据集的时间点快照.这个快照文件称为(dump.rdb)RDB文件,Redis DataB ...

  7. 支付宝退款和结果查询接口简单实现(.Net 7.0)

    〇.前言 支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手. 官方接口文档地址:退款-alipay.trade.refund ...

  8. Python学习的个人笔记

    python基础知识 目录: Python基础语法: (1)打印出hello world (2)注释 (3)数据类型 (4)运算 (5)输入 (6)输出 (7)序列 (8)相等比较 (9)选择 (10 ...

  9. GeoScene Pro处理并发布倾斜摄影(OSGB)

    前言 看了网上好多教程,很多都不全,在自己操作的过程中遇到了很多问题,最后将我完整的流程整理出来,以供大家参考 从数据处理.优化.发布.加载完整流程都有 一.数据格式转换 1.全局搜索"创建 ...

  10. 深度学习框架Theano停止维护

    Theano停止开发的声明地址: https://groups.google.com/g/theano-users/c/7Poq8BZutbY/m/rNCIfvAEAwAJ 原文内容: Dear us ...