public static string GetChangedText(this nHydrate.DataImport.Field item, nHydrate.DataImport.Field target) { var retval = string.Empty; if (item.Collate != target.Collate) { retval += "Collate: " + item.Collate + "->" + target.Collate + "\r\n"; } if (item.DataType != target.DataType) { retval += "DataType: " + item.DataType + "->" + target.DataType + "\r\n"; } if (item.DefaultValue != target.DefaultValue) { retval += "DefaultValue: " + item.DefaultValue + "->" + target.DefaultValue + "\r\n"; } if (item.Identity != target.Identity) { retval += "Identity: " + item.Identity + "->" + target.Identity + "\r\n"; } if (item.IsBrowsable != target.IsBrowsable) { retval += "IsBrowsable: " + item.IsBrowsable + "->" + target.IsBrowsable + "\r\n"; } if (item.IsIndexed != target.IsIndexed) { retval += "IsIndexed: " + item.IsIndexed + "->" + target.IsIndexed + "\r\n"; } if (item.IsReadOnly != target.IsReadOnly) { retval += "IsReadOnly: " + item.IsReadOnly + "->" + target.IsReadOnly + "\r\n"; } if (item.Length != target.Length) { retval += "Length: " + item.Length + "->" + target.Length + "\r\n"; } if (item.Nullable != target.Nullable) { retval += "Nullable: " + item.Nullable + "->" + target.Nullable + "\r\n"; } if (item.PrimaryKey != target.PrimaryKey) { retval += "PrimaryKey: " + item.PrimaryKey + "->" + target.PrimaryKey + "\r\n"; } if (item.Scale != target.Scale) { retval += "Scale: " + item.Scale + "->" + target.Scale + "\r\n"; } if (item.Name != target.Name) { retval += "Name: " + item.Name + "->" + target.Name + "\r\n"; } return(retval); }
/// <summary> /// Convert a new DSL model into a data import model /// </summary> /// <param name="model"></param> /// <param name="diagram"></param> /// <returns></returns> public static nHydrate.DataImport.Database Convert(nHydrateModel model, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram) { var database = new nHydrate.DataImport.Database(); #region Load the entities foreach (var entity in model.Entities) { var newEntity = new nHydrate.DataImport.Entity(); newEntity.ID = entity.Id; newEntity.Name = entity.Name; newEntity.Schema = entity.Schema; newEntity.AllowCreateAudit = entity.AllowCreateAudit; newEntity.AllowModifyAudit = entity.AllowModifyAudit; newEntity.AllowTimestamp = entity.AllowTimestamp; newEntity.IsTenant = entity.IsTenant; database.EntityList.Add(newEntity); #region Load the fields foreach (var field in entity.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; newField.Identity = (field.Identity == IdentityTypeConstants.Database); newField.IsIndexed = field.IsIndexed; newField.IsReadOnly = field.IsReadOnly; newField.Length = field.Length; newField.Name = field.Name; newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newEntity.FieldList.Add(newField); } #endregion } #endregion #region Load Relations foreach (var shape in diagram.NestedChildShapes) { if (shape is EntityAssociationConnector) { var connector = shape as EntityAssociationConnector; var parent = connector.FromShape.ModelElement as Entity; var child = connector.ToShape.ModelElement as Entity; var relation = connector.ModelElement as EntityHasEntities; var parentTable = database.EntityList.FirstOrDefault(x => parent != null && x.Name == parent.Name); var childTable = database.EntityList.FirstOrDefault(x => child != null && x.Name == child.Name); //If we found both parent and child tables... if (parentTable != null && childTable != null) { var newRelation = new nHydrate.DataImport.Relationship(); newRelation.ID = shape.Id; newRelation.TargetEntity = childTable; newRelation.RoleName = ((EntityHasEntities)connector.ModelElement).RoleName; newRelation.SourceEntity = parentTable; parentTable.RelationshipList.Add(newRelation); //Create the column links var fieldList = model.RelationFields.Where(x => relation != null && x.RelationID == relation.Id); foreach (var columnSet in fieldList) { var field1 = parent.Fields.FirstOrDefault(x => x.Id == columnSet.SourceFieldId); var field2 = child.Fields.FirstOrDefault(x => x.Id == columnSet.TargetFieldId); var column1 = parentTable.FieldList.FirstOrDefault(x => field1 != null && x.Name == field1.Name); var column2 = childTable.FieldList.FirstOrDefault(x => field2 != null && x.Name == field2.Name); newRelation.RelationshipColumnList.Add(new nHydrate.DataImport.RelationshipDetail() { ParentField = column1, ChildField = column2, } ); } } } } #endregion #region Load Views foreach (var view in model.Views) { var newView = new nHydrate.DataImport.View(); newView.ID = view.Id; newView.Name = view.Name; newView.Schema = view.Schema; newView.SQL = view.SQL; database.ViewList.Add(newView); //Load the fields foreach (var field in view.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; //newField.Collate = field.Collate; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newField.Length = field.Length; newField.Name = field.Name; //newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newView.FieldList.Add(newField); } } #endregion return(database); }
/// <summary> /// Convert a new DSL model into a data import model /// </summary> /// <param name="model"></param> /// <param name="diagram"></param> /// <returns></returns> public static nHydrate.DataImport.Database Convert(nHydrateModel model, Microsoft.VisualStudio.Modeling.Diagrams.Diagram diagram) { var database = new nHydrate.DataImport.Database(); database.Collate = model.Collate; #region Load the entities foreach (var entity in model.Entities.Where(x => x.IsGenerated)) { var newEntity = new nHydrate.DataImport.Entity(); newEntity.ID = entity.Id; newEntity.Name = entity.Name; newEntity.Schema = entity.Schema; newEntity.AllowCreateAudit = entity.AllowCreateAudit; newEntity.AllowModifyAudit = entity.AllowModifyAudit; newEntity.AllowTimestamp = entity.AllowTimestamp; newEntity.IsTenant = entity.IsTenant; database.EntityList.Add(newEntity); #region Load the fields foreach (var field in entity.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; newField.Collate = field.Collate; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; newField.Identity = (field.Identity == IdentityTypeConstants.Database); newField.IsIndexed = field.IsIndexed; newField.IsReadOnly = field.IsReadOnly; newField.Length = field.Length; newField.Name = field.Name; newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newField.IsBrowsable = field.IsBrowsable; newEntity.FieldList.Add(newField); } #endregion } #endregion #region Load Relations foreach (var shape in diagram.NestedChildShapes) { if (shape is EntityAssociationConnector) { var connector = shape as EntityAssociationConnector; var parent = connector.FromShape.ModelElement as Entity; var child = connector.ToShape.ModelElement as Entity; var relation = connector.ModelElement as EntityHasEntities; var parentTable = database.EntityList.FirstOrDefault(x => parent != null && x.Name == parent.Name); var childTable = database.EntityList.FirstOrDefault(x => child != null && x.Name == child.Name); //If we found both parent and child tables... if (parentTable != null && childTable != null) { var newRelation = new nHydrate.DataImport.Relationship(); newRelation.ID = shape.Id; newRelation.TargetEntity = childTable; newRelation.RoleName = ((EntityHasEntities)connector.ModelElement).RoleName; newRelation.SourceEntity = parentTable; parentTable.RelationshipList.Add(newRelation); //Create the column links var fieldList = model.RelationFields.Where(x => relation != null && x.RelationID == relation.Id); foreach (var columnSet in fieldList) { var field1 = parent.Fields.FirstOrDefault(x => x.Id == columnSet.SourceFieldId); var field2 = child.Fields.FirstOrDefault(x => x.Id == columnSet.TargetFieldId); var column1 = parentTable.FieldList.FirstOrDefault(x => field1 != null && x.Name == field1.Name); var column2 = childTable.FieldList.FirstOrDefault(x => field2 != null && x.Name == field2.Name); newRelation.RelationshipColumnList.Add(new nHydrate.DataImport.RelationshipDetail() { ParentField = column1, ChildField = column2, } ); } } } } #endregion #region Load Stored Procedures foreach (var storedProc in model.StoredProcedures.Where(x => x.IsGenerated)) { var newStoredProc = new nHydrate.DataImport.StoredProc(); newStoredProc.ID = storedProc.Id; newStoredProc.Name = storedProc.Name; newStoredProc.Schema = storedProc.Schema; newStoredProc.SQL = storedProc.SQL; database.StoredProcList.Add(newStoredProc); //Load the fields foreach (var field in storedProc.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; //newField.Collate = field.Collate; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newField.Length = field.Length; newField.Name = field.Name; //newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newStoredProc.FieldList.Add(newField); } //Load the parameters foreach (var parameter in storedProc.Parameters) { var newParameter = new nHydrate.DataImport.Parameter(); newParameter.ID = parameter.Id; newParameter.Nullable = parameter.Nullable; //newField.Collate = field.Collate; newParameter.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), parameter.DataType.ToString()); newParameter.DefaultValue = parameter.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newParameter.Length = parameter.Length; newParameter.Name = parameter.Name; //newField.PrimaryKey = field.IsPrimaryKey; newParameter.Scale = parameter.Scale; newStoredProc.ParameterList.Add(newParameter); } } #endregion #region Load Views foreach (var view in model.Views.Where(x => x.IsGenerated)) { var newView = new nHydrate.DataImport.View(); newView.ID = view.Id; newView.Name = view.Name; newView.Schema = view.Schema; newView.SQL = view.SQL; database.ViewList.Add(newView); //Load the fields foreach (var field in view.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; //newField.Collate = field.Collate; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newField.Length = field.Length; newField.Name = field.Name; //newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newView.FieldList.Add(newField); } } #endregion #region Load Functions foreach (var function in model.Functions.Where(x => x.IsGenerated)) { var newFunction = new nHydrate.DataImport.Function(); newFunction.ID = function.Id; newFunction.Name = function.Name; newFunction.Schema = function.Schema; newFunction.SQL = function.SQL; database.FunctionList.Add(newFunction); //Load the fields foreach (var field in function.Fields) { var newField = new nHydrate.DataImport.Field(); newField.ID = field.Id; newField.Nullable = field.Nullable; //newField.Collate = field.Collate; newField.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), field.DataType.ToString()); newField.DefaultValue = field.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newField.Length = field.Length; newField.Name = field.Name; //newField.PrimaryKey = field.IsPrimaryKey; newField.Scale = field.Scale; newFunction.FieldList.Add(newField); } //Load the parameters foreach (var parameter in function.Parameters) { var newParameter = new nHydrate.DataImport.Parameter(); newParameter.ID = parameter.Id; newParameter.Nullable = parameter.Nullable; //newField.Collate = field.Collate; newParameter.DataType = (System.Data.SqlDbType)Enum.Parse(typeof(System.Data.SqlDbType), parameter.DataType.ToString()); newParameter.DefaultValue = parameter.Default; //newField.Identity = (field.Identity == IdentityTypeConstants.Database); //newField.IsIndexed = field.IsIndexed; newParameter.Length = parameter.Length; newParameter.Name = parameter.Name; //newField.PrimaryKey = field.IsPrimaryKey; newParameter.Scale = parameter.Scale; newFunction.ParameterList.Add(newParameter); } } #endregion return database; }