Exemplo n.º 1
0
        /// <summary>
        /// 配置数据库
        /// </summary>
        /// <typeparam name="TDbContext"></typeparam>
        /// <param name="providerName">数据库提供器</param>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="options">数据库上下文选项构建器</param>
        /// <param name="dynamicDbContext">动态数据库上下文,用于分表分库用</param>
        private static DbContextOptionsBuilder ConfigureDatabase <TDbContext>(string providerName, string connectionString, DbContextOptionsBuilder options, bool dynamicDbContext = false)
            where TDbContext : DbContext
        {
            var dbContextOptionsBuilder = options;

            if (!string.IsNullOrEmpty(connectionString))
            {
                providerName ??= DbProvider.GetAppDbContextAttribute <TDbContext>()?.ProviderName;

                // 调用对应数据库程序集
                var(UseMethod, MySqlVersion) = GetDatabaseProviderUseMethod(providerName);

                // 处理最新 MySql 包兼容问题
                // https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/commit/83c699f5b747253dc1b6fa9c470f469467d77686
                if (providerName.StartsWith(DbProvider.MySql))
                {
                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, MySqlVersion, MigrationsAssemblyAction }) as DbContextOptionsBuilder;
                }
                else
                {
                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, MigrationsAssemblyAction }) as DbContextOptionsBuilder;
                }
            }

            // 解决分表分库
            if (dynamicDbContext)
            {
                dbContextOptionsBuilder
                .ReplaceService <IModelCacheKeyFactory, DynamicModelCacheKeyFactory>();
            }

            return(dbContextOptionsBuilder);
        }
Exemplo n.º 2
0
        public static void ShowGCD(int[] arrayNum)
        {
            UseMethod methodE           = UseEuclid;
            UseMethod methodB           = UseBinary;
            int       firstNumForEuclid = arrayNum[0];
            int       secondNumForEuclid;
            int       firstNumForBinary = arrayNum[0];
            int       secondNumForBinary;
            Stopwatch swatch = new Stopwatch();

            swatch.Start();
            for (int i = 1; i < arrayNum.Length; i++)
            {
                secondNumForEuclid = arrayNum[i];
                firstNumForEuclid  = methodE(firstNumForEuclid, secondNumForEuclid);
            }
            swatch.Stop();
            Console.WriteLine($"НОД Евклидом: {firstNumForEuclid}. Время на выполнения:{swatch.Elapsed}");
            Stopwatch swatchTwo = new Stopwatch();

            swatchTwo.Start();
            for (int i = 1; i < arrayNum.Length; i++)
            {
                secondNumForBinary = arrayNum[i];
                firstNumForBinary  = methodB(firstNumForBinary, secondNumForBinary);
            }
            swatchTwo.Stop();
            Console.WriteLine($"НОД Бинарный: {firstNumForEuclid}. Время на выполнения:{swatchTwo.Elapsed}");
        }
Exemplo n.º 3
0
 // Start is called before the first frame update
 void Start()
 {
     defTime   = TimeToUse;
     used      = false;
     fillImage = GameObject.Find("UseHUD").GetComponent <Image>();
     if (lightStand)
     {
         UseAction = UseLightStand;
     }
     else if (chest)
     {
         UseAction = UseChest;
     }
 }
        /// <summary>
        /// 配置数据库
        /// </summary>
        /// <typeparam name="TDbContext"></typeparam>
        /// <param name="providerName">数据库提供器</param>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="options">数据库上下文选项构建器</param>
        private static DbContextOptionsBuilder ConfigureDatabase <TDbContext>(string providerName, string connectionString, DbContextOptionsBuilder options)
            where TDbContext : DbContext
        {
            var dbContextOptionsBuilder = options;

            // 获取数据库上下文特性
            var dbContextAttribute = DbProvider.GetAppDbContextAttribute(typeof(TDbContext));

            if (!string.IsNullOrWhiteSpace(connectionString))
            {
                providerName ??= dbContextAttribute?.ProviderName;

                // 解析数据库提供器信息
                (string name, string version) = ReadProviderInfo(providerName);
                providerName = name;

                // 调用对应数据库程序集
                var(UseMethod, MySqlVersion) = GetDatabaseProviderUseMethod(providerName, version);

                // 处理最新第三方 MySql 包兼容问题
                // https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/commit/83c699f5b747253dc1b6fa9c470f469467d77686
                if (DbProvider.IsDatabaseFor(providerName, DbProvider.MySql))
                {
                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, MySqlVersion, MigrationsAssemblyAction }) as DbContextOptionsBuilder;
                }
                // 处理 SqlServer 2005-2008 兼容问题
                else if (DbProvider.IsDatabaseFor(providerName, DbProvider.SqlServer) && (version == "2008" || version == "2005"))
                {
                    // 替换工厂
                    dbContextOptionsBuilder.ReplaceService <IQueryTranslationPostprocessorFactory, SqlServer2008QueryTranslationPostprocessorFactory>();

                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, MigrationsAssemblyAction }) as DbContextOptionsBuilder;
                }
                // 处理 Oracle 11 兼容问题
                else if (DbProvider.IsDatabaseFor(providerName, DbProvider.Oracle) && !string.IsNullOrWhiteSpace(version))
                {
                    Action <IRelationalDbContextOptionsBuilderInfrastructure> oracleOptionsAction = options =>
                    {
                        var optionsType = options.GetType();

                        // 处理版本号
                        optionsType.GetMethod("UseOracleSQLCompatibility")
                        .Invoke(options, new[] { version });

                        // 处理迁移程序集
                        optionsType.GetMethod("MigrationsAssembly")
                        .Invoke(options, new[] { Db.MigrationAssemblyName });
                    };

                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, oracleOptionsAction }) as DbContextOptionsBuilder;
                }
                else
                {
                    dbContextOptionsBuilder = UseMethod
                                              .Invoke(null, new object[] { options, connectionString, MigrationsAssemblyAction }) as DbContextOptionsBuilder;
                }
            }

            // 解决分表分库
            if (dbContextAttribute?.Mode == DbContextMode.Dynamic)
            {
                dbContextOptionsBuilder
                .ReplaceService <IModelCacheKeyFactory, DynamicModelCacheKeyFactory>();
            }

            return(dbContextOptionsBuilder);
        }