/// <summary> /// 数据库连接,根据数据库类型自动识别,类型区分用配置名称是否包含主要关键字 /// MSSQL、MYSQL、ORACLE、SQLITE、MEMORY、NPGSQL /// </summary> /// <returns></returns> public DbConnection OpenSharedConnection() { YuebonCacheHelper yuebonCacheHelper = new YuebonCacheHelper(); object connCode = yuebonCacheHelper.Get("CodeGeneratorDbConn"); DbConnectionOptions dbConnectionOptions = DBServerProvider.GeDbConnectionOptions(); DatabaseType dbType = DatabaseType.SqlServer; if (connCode != null) { defaultSqlConnectionString = connCode.ToString(); string dbTypeCache = yuebonCacheHelper.Get("CodeGeneratorDbType").ToString(); dbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), dbTypeCache); } else { defaultSqlConnectionString = dbConnectionOptions.ConnectionString; dbType = dbConnectionOptions.DatabaseType; TimeSpan expiresSliding = DateTime.Now.AddMinutes(30) - DateTime.Now; yuebonCacheHelper.Add("CodeGeneratorDbConn", defaultSqlConnectionString, expiresSliding, false); yuebonCacheHelper.Add("CodeGeneratorDbType", dbType, expiresSliding, false); } if (dbType == DatabaseType.SqlServer) { dbConnection = new SqlConnection(defaultSqlConnectionString); } else if (dbType == DatabaseType.MySql) { dbConnection = new MySqlConnection(defaultSqlConnectionString); } else if (dbType == DatabaseType.Oracle) { dbConnection = new OracleConnection(defaultSqlConnectionString); } else if (dbType == DatabaseType.SQLite) { dbConnection = new SqliteConnection(defaultSqlConnectionString); } else if (dbType == DatabaseType.Npgsql) { dbConnection = new NpgsqlConnection(defaultSqlConnectionString); } else { throw new NotSupportedException("The database is not supported"); } if (dbConnection.State != ConnectionState.Open) { dbConnection.Open(); } return(dbConnection); }
/// <summary> /// 创建数据库读写上下文 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="writeAndRead">指定读、写操作</param> /// <returns></returns> public BaseDbContext CreateContext <TEntity>(WriteAndReadEnum writeAndRead) { DbConnectionOptions dbConnectionOptions = new DbConnectionOptions(); switch (writeAndRead) { case WriteAndReadEnum.Write: dbConnectionOptions = DBServerProvider.GeDbConnectionOptions <TEntity>(true); break; case WriteAndReadEnum.Read: dbConnectionOptions = DBServerProvider.GeDbConnectionOptions <TEntity>(false); break; default: dbConnectionOptions = DBServerProvider.GeDbConnectionOptions <TEntity>(true); break; } return(new BaseDbContext(dbConnectionOptions)); }
/// <summary> /// 配置,初始化数据库引擎 /// </summary> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (dbConnectionOptions == null) { dbConnectionOptions = DBServerProvider.GeDbConnectionOptions(); } string defaultSqlConnectionString = dbConnectionOptions.ConnectionString; DatabaseType dbType = dbConnectionOptions.DatabaseType; if (dbType == DatabaseType.SqlServer) { optionsBuilder.UseSqlServer(defaultSqlConnectionString); } else if (dbType == DatabaseType.MySql) { optionsBuilder.UseMySql(defaultSqlConnectionString, new MySqlServerVersion(new Version(8, 0, 21)), mySqlOptions => mySqlOptions .CharSetBehavior(CharSetBehavior.NeverAppend)); } else if (dbType == DatabaseType.Oracle) { optionsBuilder.UseOracle(defaultSqlConnectionString); } else if (dbType == DatabaseType.SQLite) { optionsBuilder.UseSqlite(defaultSqlConnectionString); } else if (dbType == DatabaseType.Npgsql) { optionsBuilder.UseNpgsql(defaultSqlConnectionString); } else { throw new NotSupportedException("The database is not supported"); } //使用查询跟踪行为 optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); base.OnConfiguring(optionsBuilder); }