private void AddPointerShards(DataElasticityEntities context, ShardSetConfig shardSetConfig) { foreach (var ps in shardSetConfig.Shards) { if (ps.PointerShardID == -1) { AddShardToShardSet(ps, shardSetConfig); } else { ModifyShard(ps); } } var deleteShards = context.Shards.Where(p => p.ShardSetID == shardSetConfig.ShardSetID); foreach (var ps in deleteShards) { if (shardSetConfig.Shards.Count(x => x.PointerShardID == ps.ShardID) == 0) { context.Shards.Remove(ps); } } }
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); }