using Bunny.Common.Context; using Bunny.Dao.Entity.Base; using Bunny.Dao.Entity.System; using Microsoft.EntityFrameworkCore; namespace Bunny.Common.Connect; public class EfCoreContext : DbContext { public EfCoreContext() { // DbPath = @"D:\MyFolder\Bunny\Bunny-cli\Template\CSharp\CSharp-Single-EFCore\Bunny.WebApi\Database\bunny.db"; var dataBaseConnection = AppSettings.GetAppConfig("DataBase:DataBaseConnection"); DbPath = dataBaseConnection; } public 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.UseSqlite($"Data Source={DbPath}"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 添加过滤器 modelBuilder.Entity() .HasQueryFilter(e => !e.IsDeleted); // 默认值为false,表示未删除 modelBuilder.Entity() .Property(e => e.IsDeleted) .HasDefaultValue(false); base.OnModelCreating(modelBuilder); } public override int SaveChanges() { SetSystemField(); return base.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) switch (item.State) { //添加操作 case EntityState.Added: { if (entity.Id == string.Empty) entity.Id = Guid.NewGuid().ToString(); entity.CreateTime = DateTime.Now; entity.UpdateTime = DateTime.Now; entity.CreateUserId = BaseContext.GetUserId()!.Value; entity.UpdateUserId = BaseContext.GetUserId()!.Value; break; } //修改操作 case EntityState.Modified: entity.UpdateTime = DateTime.Now; entity.UpdateUserId = BaseContext.GetUserId()!.Value; break; case EntityState.Detached: break; case EntityState.Unchanged: break; case EntityState.Deleted: entity.UpdateTime = DateTime.Now; entity.UpdateUserId = BaseContext.GetUserId()!.Value; break; default: throw new ArgumentOutOfRangeException(); } } }