using Bunny.Common.Interceptor; using Bunny.Dao.Entity.Base; using Bunny.Dao.Entity.System; using Microsoft.EntityFrameworkCore; namespace Bunny.Common.Context; /// /// EfCore 连接内容 /// dotnet tool install --global dotnet-ef /// dotnet add package Microsoft.EntityFrameworkCore.Design /// dotnet ef migrations add InitialCreate /// dotnet ef database update /// public class EfCoreContext : DbContext { public EfCoreContext() { // var dataBaseConnection = AppSettings.GetAppConfig("DataBase:DataBaseConnection"); const string dataBaseConnection = "192.168.3.98;Initial Catalog=BunnyDemo;TrustServerCertificate=True;Persist Security Info=True;User ID=sa;Password=abc1234."; DbPath = $"Data Source={dataBaseConnection}"; } // 连接路径 private string DbPath { get; } public DbSet Blogs { get; set; } public DbSet Posts { get; set; } public DbSet Products { get; set; } public DbSet Users { get; set; } /// /// 配置数据库上下文选项,指定数据库连接字符串 /// protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseSqlServer(DbPath).AddInterceptors(new TransactionInterceptor()); } /// /// 在创建模型时,为所有继承自BaseEntity的实体类型添加软删除查询过滤器 /// protected override void OnModelCreating(ModelBuilder modelBuilder) { foreach (var entityType in modelBuilder.Model.GetEntityTypes()) if (typeof(BaseEntity).IsAssignableFrom(entityType.ClrType)) entityType.AddSoftDeleteQueryFilter(); base.OnModelCreating(modelBuilder); } /// /// 重写SaveChanges方法,在保存更改之前设置系统字段 /// public override int SaveChanges() { SetSystemField(); return base.SaveChanges(); } /// /// 重写SaveChanges方法,在保存更改之前设置系统字段 /// public override int SaveChanges(bool acceptAllChangesOnSuccess) { SetSystemField(); return base.SaveChanges(acceptAllChangesOnSuccess); } /// /// 异步保存更改,设置系统字段 /// public override Task SaveChangesAsync(CancellationToken cancellationToken = new()) { SetSystemField(); return base.SaveChangesAsync(cancellationToken); } /// /// 异步保存更改,设置系统字段 /// public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new()) { SetSystemField(); return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); } /// /// 系统字段赋值 /// private void SetSystemField() { foreach (var item in ChangeTracker.Entries()) if (item.Entity is BaseEntity entity) { var userId = BaseContext.GetUserId(); switch (item.State) { // 添加操作 case EntityState.Added: { if (entity.Id == Guid.Empty) entity.Id = Guid.NewGuid(); entity.CreateTime = DateTime.Now; entity.UpdateTime = DateTime.Now; // 判断用户Id是否为空 if (userId != null) { entity.CreateUserId = userId!.Value; entity.UpdateUserId = userId!.Value; } break; } // 修改操作 case EntityState.Modified: entity.UpdateTime = DateTime.Now; if (userId != null) entity.UpdateUserId = userId!.Value; break; } } } }