public void Generate(Package sourcePackage, Package targetPackage, FileInfo outputFile) { var serializer = new XmlSerializer(typeof(DataSchemaModel)); var uri = PackUriHelper.CreatePartUri(new Uri("/replication.xml", UriKind.Relative)); var sourceModel = (DataSchemaModel)serializer.Deserialize(sourcePackage.GetPart(uri).GetStream()); var targetModel = (DataSchemaModel)serializer.Deserialize(targetPackage.GetPart(uri).GetStream()); var outputFileSql = new List<string>(); foreach (var publicationToCreate in sourceModel.Model.Elements.Except(targetModel.Model.Elements, x => x.Name)) { var createPublicationStep = new CreatePublicationStep(publicationToCreate); outputFileSql.AddRange(createPublicationStep.GenerateTSQL()); } foreach (var publicationToAlter in sourceModel.Model.Elements.Intersect(targetModel.Model.Elements, x => x.Name)) { var sqlPublicationComparer = new SqlPublicationComparer(); var matchingPublicationInTarget = targetModel.Model.Elements.Single(x => x.Name == publicationToAlter.Name); var alterPublicationStep = new AlterPublicationStep(sqlPublicationComparer.Compare(publicationToAlter, matchingPublicationInTarget)); outputFileSql.AddRange(alterPublicationStep.GenerateTSQL()); } foreach (var publicationToDrop in targetModel.Model.Elements.Except(sourceModel.Model.Elements, x => x.Name)) { var dropPublicationStep = new DropPublicationStep(publicationToDrop); outputFileSql.AddRange(dropPublicationStep.GenerateTSQL()); } }
public void Generate(Package sourcePackage, Package targetPackage, FileInfo outputFile) { var serializer = new XmlSerializer(typeof(DataSchemaModel)); var uri = PackUriHelper.CreatePartUri(new Uri("/replication.xml", UriKind.Relative)); var sourceModel = (DataSchemaModel)serializer.Deserialize(sourcePackage.GetPart(uri).GetStream()); var targetModel = (DataSchemaModel)serializer.Deserialize(targetPackage.GetPart(uri).GetStream()); var outputFileSql = new List <string>(); foreach (var publicationToCreate in sourceModel.Model.Elements.Except(targetModel.Model.Elements, x => x.Name)) { var createPublicationStep = new CreatePublicationStep(publicationToCreate); outputFileSql.AddRange(createPublicationStep.GenerateTSQL()); } foreach (var publicationToAlter in sourceModel.Model.Elements.Intersect(targetModel.Model.Elements, x => x.Name)) { var sqlPublicationComparer = new SqlPublicationComparer(); var matchingPublicationInTarget = targetModel.Model.Elements.Single(x => x.Name == publicationToAlter.Name); var alterPublicationStep = new AlterPublicationStep(sqlPublicationComparer.Compare(publicationToAlter, matchingPublicationInTarget)); outputFileSql.AddRange(alterPublicationStep.GenerateTSQL()); } foreach (var publicationToDrop in targetModel.Model.Elements.Except(sourceModel.Model.Elements, x => x.Name)) { var dropPublicationStep = new DropPublicationStep(publicationToDrop); outputFileSql.AddRange(dropPublicationStep.GenerateTSQL()); } }
public void Compare() { var comparer = new SqlPublicationComparer(); var serializer = new XmlSerializer(typeof (Element)); var source = (Element)serializer.Deserialize(new FileStream(@"Samples\Compiled Model.xml", FileMode.Open)); var target = (Element)serializer.Deserialize(new FileStream(@"Samples\Extracted Model.xml", FileMode.Open)); comparer.Compare(source, target); }