CoreDbContext.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using ERP.Core.Entity;
  2. using ERP.Framework.WebApi;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.Logging;
  6. using Microsoft.Extensions.Options;
  7. using Serilog;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace ERP.Core.Context
  14. {
  15. public class CoreDbContext : DbContext
  16. {
  17. private readonly IConfiguration _configuration;
  18. public CoreDbContext(IConfiguration configuration)
  19. {
  20. this._configuration = configuration;
  21. }
  22. public override int SaveChanges()
  23. {
  24. var entityEntries = ChangeTracker.Entries().ToList();
  25. foreach(var entry in entityEntries)
  26. {
  27. if (entry.State == EntityState.Added)
  28. {
  29. Entry(entry.Entity).Property(nameof(BaseEntity.CreateTime)).CurrentValue = DateTime.Now;
  30. //Entry(entry.Entity).Property(nameof(BaseEntity.CreateBy)).CurrentValue = DateTime.Now;
  31. }
  32. if (entry.State == EntityState.Modified)
  33. {
  34. Entry(entry.Entity).Property(nameof(BaseEntity.UpdateTime)).CurrentValue = DateTime.Now;
  35. }
  36. }
  37. return base.SaveChanges();
  38. }
  39. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  40. {
  41. var name = GetType().Name;
  42. // 可扩展为多租户,从当前请求头拿租户Id,根据租户Id获取对应数据库配置名,替换
  43. string connect = _configuration.GetConnectionString(name)!;
  44. // 可扩展为使用多种数据库,添加配置项数组根据不同租户Id,配置不同库类型,Key为租户Id/库名,对象包含数据库类型等
  45. optionsBuilder.UseMySql(connect,new MySqlServerVersion(new Version(8,0,26)));
  46. UseLog(optionsBuilder);
  47. base.OnConfiguring(optionsBuilder);
  48. }
  49. /// <summary>
  50. /// 配置模型关系
  51. /// </summary>
  52. /// <param name="modelBuilder"></param>
  53. protected override void OnModelCreating(ModelBuilder modelBuilder)
  54. {
  55. }
  56. private void UseLog(DbContextOptionsBuilder optionsBuilder)
  57. {
  58. optionsBuilder.UseLoggerFactory(LoggerFactory.Create(builder =>
  59. {
  60. builder.AddConsole();
  61. builder.AddSerilog();
  62. }));
  63. }
  64. public virtual DbSet<SysUser> SysUser { get; set; }
  65. }
  66. }