2024-08-30 16:08:08 +08:00
|
|
|
|
using Bunny.Common.Context;
|
|
|
|
|
using Bunny.Dao.Entity.Base;
|
|
|
|
|
using Bunny.Dao.Entity.System;
|
2024-08-08 23:34:22 +08:00
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
2024-08-09 10:06:17 +08:00
|
|
|
|
namespace Bunny.Common.Connect;
|
2024-08-08 23:34:22 +08:00
|
|
|
|
|
|
|
|
|
public class EfCoreContext : DbContext
|
|
|
|
|
{
|
|
|
|
|
public EfCoreContext()
|
|
|
|
|
{
|
2024-08-09 10:06:17 +08:00
|
|
|
|
// DbPath = @"D:\MyFolder\Bunny\Bunny-cli\Template\CSharp\CSharp-Single-EFCore\Bunny.WebApi\Database\bunny.db";
|
|
|
|
|
var dataBaseConnection = AppSettings.GetAppConfig<string>("DataBase:DataBaseConnection");
|
|
|
|
|
DbPath = dataBaseConnection;
|
2024-08-08 23:34:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-08-09 10:06:17 +08:00
|
|
|
|
public string DbPath { get; }
|
|
|
|
|
|
2024-08-08 23:34:22 +08:00
|
|
|
|
public DbSet<Blog> Blogs { get; set; }
|
|
|
|
|
public DbSet<Post> Posts { get; set; }
|
2024-08-09 00:16:40 +08:00
|
|
|
|
public DbSet<Product> Products { get; set; }
|
|
|
|
|
public DbSet<User> Users { get; set; }
|
2024-08-08 23:34:22 +08:00
|
|
|
|
|
|
|
|
|
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
|
|
|
|
{
|
|
|
|
|
options.UseSqlite($"Data Source={DbPath}");
|
|
|
|
|
}
|
2024-08-30 16:08:08 +08:00
|
|
|
|
|
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
|
|
|
{
|
|
|
|
|
// 添加过滤器
|
|
|
|
|
modelBuilder.Entity<BaseEntity>()
|
|
|
|
|
.HasQueryFilter(e => !e.IsDeleted);
|
|
|
|
|
|
|
|
|
|
// 默认值为false,表示未删除
|
|
|
|
|
modelBuilder.Entity<BaseEntity>()
|
|
|
|
|
.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<int> SaveChangesAsync(CancellationToken cancellationToken = new())
|
|
|
|
|
{
|
|
|
|
|
SetSystemField();
|
|
|
|
|
return base.SaveChangesAsync(cancellationToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,
|
|
|
|
|
CancellationToken cancellationToken = new())
|
|
|
|
|
{
|
|
|
|
|
SetSystemField();
|
|
|
|
|
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 系统字段赋值
|
|
|
|
|
/// </summary>
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-08-08 23:34:22 +08:00
|
|
|
|
}
|