using CloudGaming.AppConfigModel; using AppConfig = CloudGaming.Code.DataBaseModel.AppConfig; using Microsoft.AspNetCore.Hosting; namespace CloudGaming.Repository.Game; /// /// /// [DbContextConfig($"Repository.*.Entities.Game.*")] public class GameDbContext : BaseDbContext { /// /// /// public override IUnitOfWork UnitOfWork { get; } public GameDbContext(IConfiguration configuration, IWebHostEnvironment webHostEnvironment, AppConfig appConfig) : base(configuration, webHostEnvironment, appConfig, AppDataBaseType.Game) { UnitOfWork = new UnitOfWorkImpl(this); } /// /// 配置 /// /// /// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var repositoryOptions = this.GetRepositoryOptions(); // 获取连接字符串 var connectionString = repositoryOptions.ConnectionString; switch (repositoryOptions.DefaultDatabaseType) { case DefaultDatabaseType.SqlServer: optionsBuilder .UseSqlServer(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000)) ; break; case DefaultDatabaseType.MySql: optionsBuilder .UseMySql(connectionString, MySqlServerVersion.LatestSupportedServerVersion, w => w.MinBatchSize(1).MaxBatchSize(1000)) ; break; case DefaultDatabaseType.PostgreSql: optionsBuilder .UseNpgsql(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000)) ; break; case DefaultDatabaseType.Oracle: optionsBuilder .UseOracle(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000)) ; break; default: break; } //if (_webHostEnvironment.IsDevelopment()) //{ // // sql 日志写入控制台 // var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole(configure => // { // configure.LogToStandardErrorThreshold = LogLevel.Error; // })); // optionsBuilder.UseLoggerFactory(loggerFactory) // //.EnableDetailedErrors() // //.EnableSensitiveDataLogging(true) // ; //} // 懒加载代理 //options.UseLazyLoadingProxies(); //添加 EFCore 监控 和 动态表名 optionsBuilder.AddEntityFrameworkMonitor(repositoryOptions.IsMonitorEFCore); optionsBuilder.AddInterceptors(new AuditInterceptor()); } }