Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台的对象数据库映射器(ORM),它极大地简化了.NET开发人员与数据库交互的复杂性。然而,在某些高级或性能敏感的场景中,标准的 EF Core 功能可能不足以满足需求。这时,Entity Framework Plus(EF Plus)便成为了开发者的得力助手。EF Plus 是一个开源、免费(MIT License)的扩展库,旨在提升 EF Core 的性能和克服其局限性。本文将介绍 EF Plus 的主要功能,并通过例子代码展示其在实际开发中的应用。
EF Plus 支持批量插入、更新、删除和合并操作,这些操作可以在单个数据库往返中处理多条记录,从而显著提高性能。
例子代码:批量删除
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Z.EntityFramework.Plus; // 引入EF Plus命名空间
public class EntitiesContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("your_connection_string_here");
}
}
public class User
{
public int Id { get; set; }
public DateTime LastLoginDate { get; set; }
public bool IsSoftDeleted { get; set; }
}
class Program
{
static void Main()
{
using (var ctx = new EntitiesContext())
{
var date = DateTime.Now.AddYears(-2);
// 使用BatchSize进行批量删除
ctx.Users.Where(x => x.LastLoginDate < date).Delete(x => x.BatchSize = 1000);
}
}
}
EF Plus 提供查询缓存功能,允许将查询结果缓存在内存中,减少对数据库的重复查询,提高应用程序的响应速度。
例子代码:查询缓存
using System;
using Microsoft.EntityFrameworkCore;
using Z.EntityFramework.Plus;
class Program
{
static void Main()
{
using (var ctx = new EntitiesContext())
{
// 使用缓存查询
var states = ctx.States.Where(x => x.IsActive).FromCache(DateTime.Now.AddHours(2));
// 或者使用更灵活的缓存选项
var options = new MemoryCacheEntryOptions { SlidingExpiration = TimeSpan.FromHours(2) };
var statesWithOptions = ctx.States.Where(x => x.IsActive).FromCache(options);
}
}
}
EF Plus 支持在全局、实例或查询级别上应用过滤条件,以便在检索数据时自动应用这些条件。
例子代码:全局过滤
using Z.EntityFramework.Plus;
class Program
{
static void Main()
{
using (var ctx = new EntitiesContext())
{
// 创建全局过滤器
QueryFilterManager.Filter<Customer>(x => x.Where(c => c.IsActive));
// 初始化全局过滤器
QueryFilterManager.InitializeGlobalFilter(ctx);
// 执行查询,自动应用过滤器
var customers = ctx.Customers.ToList();
}
}
}
EF Plus 支持批量更新操作,无需加载实体到内存中,直接更新数据库中的数据。
例子代码:批量更新
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Z.EntityFramework.Plus;
class Program
{
static void Main()
{
using (var ctx = new EntitiesContext())
{
var date = DateTime.Now.AddYears(-2);
// 使用EF Plus进行批量更新
ctx.Users.Where(x => x.LastLoginDate < date)
.Update(x => new User { IsSoftDeleted = true });
}
}
}
EF Plus 提供了审计跟踪功能,允许自动跟踪对实体的更改,并将审计信息保存到数据库中。
例子代码:审计跟踪配置(需自行实现保存逻辑)
EF Plus 的审计跟踪功能通常需要结合自定义的保存逻辑来实现。这里不直接展示代码,但你可以通过监听 EF Core 的 SaveChanges 事件来捕获实体的更改,并使用 EF Plus 的 Audit 功能来获取更改详情,然后将这些信息保存到数据库中。
Entity Framework Plus 为 EF Core 开发者提供了强大的扩展功能,如批量操作、查询缓存、查询过滤、批量更新和审计跟踪等。这些功能不仅提高了开发效率,还显著提升了应用程序的性能和响应速度。通过使用 EF Plus,开发者可以更加灵活地处理复杂的数据库操作,让 EF Core 开发如虎添翼。
原文作者:后端Q;如有侵权,请联系管理员删除。