예제 #1
0
        public static string GetShardingAlgorithm(this IDataBaseSharding dataBaseSharding, int id = MatchedID.All)
        {
            string result = string.Empty;
            var    databaseShardingAttribute = GetDataBaseShardingAttribute(dataBaseSharding, id);

            if (databaseShardingAttribute == null)
            {
                return(result);
            }
            var algorithm = databaseShardingAttribute.ShardingAlgorithm;

            return(algorithm);
        }
예제 #2
0
        public static List <ShardingParameter> GetShardingColumnValues(this IDataBaseSharding dataBaseSharding, int id = MatchedID.All)
        {
            var properties = dataBaseSharding.GetType().GetProperties();
            List <ShardingParameter> shardingColumnObjects = new List <ShardingParameter>();

            foreach (var property in properties)
            {
                var shardingColumns = property.GetCustomAttributes(typeof(ShardingColumnAttribute), true)?.Select(w => (ShardingColumnAttribute)w)?.ToList();
                var shardingColumn  = shardingColumns.FindAll(w => w.ID == id).FirstOrDefault();
                if (shardingColumn != null)
                {
                    shardingColumnObjects.Add(new ShardingParameter {
                        Key = shardingColumn.Key, Value = property.GetValue(dataBaseSharding, null)
                    });
                }
            }
            return(shardingColumnObjects);
        }
예제 #3
0
        public static void DataBaseSharding(this IDataBaseSharding dataBaseSharding, int id = MatchedID.All, string tableIndex = null)
        {
            if (dataBaseSharding == null)
            {
                return;
            }
            var shardingValues            = dataBaseSharding.GetShardingColumnValues();
            var fatabaseShardingAttribute = dataBaseSharding.GetDataBaseShardingAttribute(id);

            if (fatabaseShardingAttribute == null)
            {
                return;
            }
            var       algorithm     = fatabaseShardingAttribute.ShardingAlgorithm;
            var       shardingTotal = fatabaseShardingAttribute.ShardingMaxCount;
            ISharding sharding      = Activator.CreateInstance(Type.GetType(algorithm)) as ISharding;

            dataBaseSharding.__DataBaseIndex__ = sharding.SharingByObject(shardingValues, shardingTotal);
        }
예제 #4
0
        public static DataBaseShardingAttribute GetDataBaseShardingAttribute(this IDataBaseSharding dataBaseSharding, int id = MatchedID.All)
        {
            var databaseShardingAttribute = dataBaseSharding.GetCustomerAttributes <DataBaseShardingAttribute>().FirstOrDefault(w => w.ID == id);

            return(databaseShardingAttribute);
        }