示例#1
0
        /// <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);
        }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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);
        }