123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using ERP.Core.Entity;
- using ERP.Framework.WebApi;
- using Microsoft.EntityFrameworkCore;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Logging;
- using Serilog;
- using System.Reflection;
- namespace ERP.Core
- {
- public class CoreDbContext : DbContext
- {
- private readonly IConfiguration _configuration;
- public CoreDbContext(IConfiguration configuration)
- {
- _configuration = configuration;
- }
- public override int SaveChanges()
- {
- BeforeSaveChanges();
- var result = base.SaveChanges();
- AfterSaveChanges();
- return result;
- }
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- var name = GetType().Name;
-
- string connect = _configuration.GetConnectionString(name)!;
-
- optionsBuilder.UseMySql(connect, new MySqlServerVersion(new Version(8, 0, 26)));
- UseLog(optionsBuilder);
- base.OnConfiguring(optionsBuilder);
- }
-
-
-
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder.Entity<SysUserRole>().HasNoKey();
- modelBuilder.Entity<SysRoleMenu>().HasNoKey();
- var assembly = Assembly.GetExecutingAssembly();
-
- modelBuilder.ApplyConfigurationsFromAssembly(assembly);
- foreach (Type type in assembly.ExportedTypes
- .Where(t => t.IsClass && IsBaseEntityDerived(t)))
- {
- modelBuilder.Model.AddEntityType(type);
- }
- }
- private void BeforeSaveChanges()
- {
- ChangeTracker.DetectChanges();
- var entityEntries = ChangeTracker.Entries().ToList();
- foreach (var entry in entityEntries)
- {
-
- if (entry.State == EntityState.Added)
- {
- Entry(entry.Entity).Property(nameof(BaseEntity.CreateTime)).CurrentValue = DateTime.Now;
-
- }
- if (entry.State == EntityState.Deleted)
- {
- }
-
- if (entry.State == EntityState.Modified)
- {
- Entry(entry.Entity).Property(nameof(BaseEntity.UpdateTime)).CurrentValue = DateTime.Now;
- }
- }
- }
- private void AfterSaveChanges()
- {
- }
- private void UseLog(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseLoggerFactory(LoggerFactory.Create(builder =>
- {
- builder.AddConsole();
- builder.AddSerilog();
- }));
- }
- public static void RegisterEntities(Assembly assembly, ModelBuilder modelBuilder)
- {
- foreach (Type type in assembly.ExportedTypes)
- {
- if (type.IsClass && IsBaseEntityDerived(type))
- {
- modelBuilder.Model.AddEntityType(type);
- }
- }
- }
- private static bool IsBaseEntityDerived(Type type)
- {
-
- return type.BaseType == typeof(BaseEntity) || IsDerivedFromGenericBase(type, typeof(TreeEntity<>));
- }
- private static bool IsDerivedFromGenericBase(Type type, Type genericBaseType)
- {
-
- if (type.IsGenericType && type.GetGenericTypeDefinition() == genericBaseType)
- {
- return true;
- }
-
- if (type.BaseType != null && IsDerivedFromGenericBase(type.BaseType, genericBaseType))
- {
- return true;
- }
- return false;
- }
- }
- }
|