CSharp-Single-EFCore/Bunny.Common/Connect/EFCoreContext.cs

104 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<string>("DataBase:DataBaseConnection");
DbPath = dataBaseConnection;
}
public string DbPath { get; }
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlite($"Data Source={DbPath}");
}
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();
}
}
}