public ShardMap GetShardMap(int shardMapID) { ShardMap map = null; using (var context = GetConnection(ConnectionString)) { var dbShardMap = context.ShardMaps.FirstOrDefault(x => x.ShardMapID == shardMapID); if (dbShardMap != null) { map = new ShardMap { ShardMapID = dbShardMap.ShardMapID, Shards = dbShardMap.RangeShards.Select(x => new RangeShard { ServerInstanceName = x.Database.Server.ServerName, Catalog = x.Database.DatabaseName, HighDistributionKey = x.RangeHighValue, LowDistributionKey = x.RangeLowValue, ShardID = x.ShardID }).ToList() }; } } return(map); }
public ShardSetConfig() { ShardSetID = -1; ShardSetConfigID = -1; Version = -1; ShardMap = new ShardMap(); Servers = new List <Server>(); Shards = new List <Shard>(); ShardSetConfigSettings = new List <ShardSetConfigSetting>(); }
public ShardMap AddShardMap(ShardMap shardMap) { ShardMap savedShardMap; using (var context = GetConnection(ConnectionString)) { using (var scope = new TransactionScope()) { savedShardMap = AddShardMap(shardMap, context); scope.Complete(); } } return(savedShardMap); }
private ShardMap AddShardMap(ShardMap shardMap, DataElasticityEntities context) { if (shardMap.ShardMapID != -1) { throw new ArgumentException("Shard Map must be new"); } if (shardMap.Shards.Any(x => x.ShardID != -1)) { throw new ArgumentException("All shards in map must be new"); } var dbShardMap = new Models.ShardMap(); context.ShardMaps.Add(dbShardMap); context.SaveChanges(); shardMap.ShardMapID = dbShardMap.ShardMapID; foreach (var shard in shardMap.Shards) { var dbShard = new Models.RangeShard { Database = context.Databases .FirstOrDefault( d => d.DatabaseName == shard.Catalog && d.Server.ServerName == shard.ServerInstanceName), RangeHighValue = shard.HighDistributionKey, RangeLowValue = shard.LowDistributionKey, ShardMap = dbShardMap, }; if (dbShard.Database == null) { dbShard.Database = new Database { DatabaseName = shard.Catalog, Server = context.Servers.FirstOrDefault(s => s.ServerName == shard.ServerInstanceName), }; context.Databases.Add(dbShard.Database); } context.RangeShards.Add(dbShard); context.SaveChanges(); shard.ShardID = dbShard.ShardID; } return(shardMap); }