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是一个开源、免费(MIT License)、功能强大的 Entity Framework(EF)和 Entity Framework Core(EF Core) 扩展库,旨在提升 Entity Framework 的性能和克服其局限性。通过提供一系列实用的功能,如批量操作、查询缓存、查询延迟、LINQ动态、审计跟踪等,使得使用 Entity Framework 进行数据库开发变得更加高效和灵活。
以下是 Entity Framework Plus
项目的一些主要特点和功能:
EntityFramework-Plus
支持 Entity Framework 5(EF5)、Entity Framework 6(EF6)和 Entity Framework Core(EF Core)。
EntityFramework-Plus
集成到现有的 Entity Framework 或 Entity Framework Core 项目中。
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支持💖。
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。