Beispiel #1
0
        static DefaultConnectionString()
        {
            try
            {
                String path = DALBootstrap.GetConnectionLocatorPath();
                if (String.IsNullOrEmpty(path))
                {
                    throw new Exception("ConnectionString file doesn't exist.");
                }

                rwLock.EnterWriteLock();
                var collection = DALBootstrap.ConnectionStringKeys;
                if (collection != null && collection.Count > 0)
                {
                    connectionStringCollection = getConnectionStrings(collection.AllKeys, path);
                }

                if (connectionStringCollection == null)
                {
                    connectionStringCollection = new ConnectionStringSettingsCollection();
                }
                rwLock.ExitWriteLock();
            }
            catch
            {
                throw;
            }
        }
        static DefaultConnectionString()
        {
            try
            {
                var collection = DALBootstrap.ConnectionStringKeys;
                if (collection == null || collection.Count < 1)
                {
                    throw new DalException("Missing DataConnection.ConnectionStrings.");
                }
                //这里原来的意思是从一个固定的地址去根据逻辑数据库名(key)去读真实的连接字符串
                String path = DALBootstrap.GetConnectionLocatorPath();
                if (String.IsNullOrEmpty(path))
                {
                    //默认是从config文件里面去读取
                    connectionStringCollection = loadFronBootstrapConfig(collection);
                    return;
                }

                //从指定的路径文件里面读取的
                rwLock.EnterWriteLock();
                connectionStringCollection = getConnectionStrings(collection.AllKeys, path);
                if (connectionStringCollection == null)
                {
                    connectionStringCollection = new ConnectionStringSettingsCollection();
                }
                rwLock.ExitWriteLock();
            }
            catch
            {
                throw;
            }
        }
Beispiel #3
0
        /// <summary>
        /// 构造初始化
        /// </summary>
        /// <param name="logicDbName">逻辑数据库名</param>
        public BaseDao(String logicDbName)
        {
            if (String.IsNullOrEmpty(logicDbName))
            {
                throw new DalException("Please specify databaseSet.");
            }

            LogicDbName          = logicDbName;
            shardingStrategyLazy = new Lazy <IShardingStrategy>(() => DALBootstrap.GetShardingStrategy(logicDbName), true);
        }
Beispiel #4
0
        private static IComparable getShardColumnValueByParameters(String logicDbName, IList <String> shardColumns, StatementParameterCollection parameters, Boolean quote = true)
        {
            IComparable shardColumnValue = null;

            if (shardColumns == null || shardColumns.Count == 0)
            {
                return(shardColumnValue);
            }

            if (parameters == null || parameters.Count == 0)
            {
                return(shardColumnValue);
            }

            DbDialect dbDialect = null;

            if (quote)
            {
                dbDialect = DbDialectFactory.Build(DALBootstrap.GetProviderType(logicDbName));
            }

            IDictionary <String, StatementParameter> dict = new Dictionary <String, StatementParameter>();

            foreach (var item in parameters)
            {
                String parameterName = item.Name;

                if (String.IsNullOrEmpty(parameterName))
                {
                    continue;
                }

                parameterName = parameterName.ToLower();

                if (!dict.ContainsKey(parameterName))
                {
                    dict.Add(parameterName, item);
                }
            }

            foreach (var item in shardColumns)
            {
                String name = quote ? dbDialect.QuoteParameter(item.ToLower()) : item.ToLower();

                if (dict.ContainsKey(name))
                {
                    shardColumnValue = dict[name].Value as IComparable;
                    break;
                }
            }

            return(shardColumnValue);
        }
Beispiel #5
0
        /// <summary>
        /// 获取方言DAO,请注意返回null的情况
        /// </summary>
        /// <param name="logicDbName"></param>
        /// <returns>IDialectDao</returns>
        public static IDialectDao CreateDialectDao(String logicDbName)
        {
            return(DialectDaos.GetOrAdd(logicDbName, key =>
            {
                var providerType = DALBootstrap.GetProviderType(logicDbName);
                switch (providerType)
                {
                case DatabaseProviderType.MySql:
                    return new MySqlDialectDao(key);

                default:
                    return null;
                }
            }));
        }
Beispiel #6
0
        /// <summary>
        /// 获取HA对象
        /// </summary>
        /// <param name="logicDbName"></param>
        /// <returns></returns>
        public static IHA GetInstance(String logicDbName)
        {
            var providerType = DALBootstrap.GetProviderType(logicDbName);

            switch (providerType)
            {
            case DatabaseProviderType.SqlServer:
                return(new SqlServerHA());

            case DatabaseProviderType.MySql:
                return(new MySqlHA());

            default:
                throw new NotImplementedException("Not supported.");
            }
        }