private static void LoadEntityRelations(Entity entity, DiskModel diskModel) { foreach (var relationNode in diskModel.Relations.Where(x => new Guid(x.id) == entity.Id).SelectMany(x => x.relation)) { var childid = new Guid(relationNode.childid); var child = entity.nHydrateModel.Entities.FirstOrDefault(x => x.Id == childid); if (child != null) { entity.ChildEntities.Add(child); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasEntities; connection.InternalId = new Guid(relationNode.id); connection.IsEnforced = relationNode.isenforced != 0; connection.DeleteAction = (DeleteActionConstants)Enum.Parse(typeof(DeleteActionConstants), relationNode.deleteaction); connection.RoleName = relationNode.rolename; foreach (var relationFieldNode in relationNode.relationfieldset) { var sourceFieldID = new Guid(relationFieldNode.sourcefieldid); var targetFieldID = new Guid(relationFieldNode.targetfieldid); var sourceField = entity.Fields.FirstOrDefault(x => x.Id == sourceFieldID); var targetField = entity.nHydrateModel.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == targetFieldID); if ((sourceField != null) && (targetField != null)) { var id = new Guid(relationFieldNode.id); var newRelationField = new RelationField(entity.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, id) }); newRelationField.SourceFieldId = sourceFieldID; newRelationField.TargetFieldId = targetFieldID; newRelationField.RelationID = connection.Id; entity.nHydrateModel.RelationFields.Add(newRelationField); } } } } }
public virtual string GetDataType(RelationField relationField, IDictionary <int, CharacterSet> characterSets, int defaultCharacterSetId) { return(relationField.Field.MetadataFieldType switch { MetadataFieldType.SystemGenerated => GetDataType(relationField.Field, characterSets, defaultCharacterSetId), MetadataFieldType.Domain => relationField.FieldSource.AsSqlIndentifier(), _ => throw new NotSupportedException($"Unknown field type: {relationField.Field.MetadataFieldType}."), });
private static void LoadEntityRelations(string folder, Entity entity) { XmlDocument document = null; var fileName = Path.Combine(folder, entity.Name + ".relations.xml"); if (!File.Exists(fileName)) { return; } try { document = new XmlDocument(); document.Load(fileName); } catch (Exception ex) { //Do Nothing MessageBox.Show("The file '" + fileName + "' is not valid and could not be loaded!", "Load Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } foreach (XmlNode n in document.DocumentElement) { var childid = XmlHelper.GetAttributeValue(n, "childid", Guid.Empty); var child = entity.nHydrateModel.Entities.FirstOrDefault(x => x.Id == childid); if (child != null) { entity.ChildEntities.Add(child); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasEntities; connection.InternalId = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); connection.IsEnforced = XmlHelper.GetAttributeValue(n, "isenforced", connection.IsEnforced); connection.DeleteAction = (DeleteActionConstants)Enum.Parse(typeof(DeleteActionConstants), XmlHelper.GetAttributeValue(n, "deleteaction", connection.DeleteAction.ToString())); connection.RoleName = XmlHelper.GetAttributeValue(n, "rolename", connection.RoleName); var relationColumnsNode = n.SelectSingleNode("relationfieldset"); if (relationColumnsNode != null) { foreach (XmlNode m in relationColumnsNode.ChildNodes) { var sourceFieldID = XmlHelper.GetAttributeValue(m, "sourcefieldid", Guid.Empty); var targetFieldID = XmlHelper.GetAttributeValue(m, "targetfieldid", Guid.Empty); var sourceField = entity.Fields.FirstOrDefault(x => x.Id == sourceFieldID); var targetField = entity.nHydrateModel.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == targetFieldID); if ((sourceField != null) && (targetField != null)) { var id = XmlHelper.GetAttributeValue(m, "id", Guid.NewGuid()); var newRelationField = new RelationField(entity.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, id) }); newRelationField.SourceFieldId = sourceFieldID; newRelationField.TargetFieldId = targetFieldID; newRelationField.RelationID = connection.Id; entity.nHydrateModel.RelationFields.Add(newRelationField); } } } } } }
public virtual string GetDataType(RelationField relationField, IDictionary <int, CharacterSet> characterSets, int defaultCharacterSetId) { switch (relationField.Field.MetadataFieldType) { case MetadataFieldType.SYSTEM_GENERATED: return(GetDataType(relationField.Field, characterSets, defaultCharacterSetId)); case MetadataFieldType.DOMAIN: return(relationField.FieldSource.AsSqlIndentifier()); default: throw new NotSupportedException($"Unknown field type: {relationField.Field.MetadataFieldType}."); } }
private IEnumerable <ITypeObjectNameKey> GetDependenciesFor(RelationField relationField) { foreach (var dependency in GetDependencies(relationField.RelationName, d => d.FieldName == relationField.FieldName)) { yield return(dependency); } var indices = Metadata .MetadataIndices .Indices .Values .Where(i => i.IsUserCreatedIndex && i.Segments.Any(s => s.RelationField == relationField)); foreach (var index in indices) { yield return(index); } }
private void ConvertJoinTable(JoinTable joinTable, StringBuilder sbTarget) { if (joinTable == null || joinTable.RelFields.IsEmpty()) { throw new Exception("关联表信息不完整!"); } //关联表sql模板: join base_dict_type bdt on bd.dict_type=bdt.type_code StringBuilder sbInner = new StringBuilder(); sbInner.AppendFormat("{0} join {1} on ", joinTable.JoinType, joinTable.Table); RelationField relField = null; for (int idx = 0; idx < joinTable.RelFields.Count; idx++) { relField = joinTable.RelFields[idx]; sbInner.AppendFormat("{0} = {1} {2} ", relField.Field1, relField.Field2, idx == joinTable.RelFields.Count - 1 ? "" : "and"); } sbTarget.Append(sbInner.ToString()); }
public void Fluent_config_complex_field() { ISqlSubject s1, s2; var config = new MatrixConfiguration(); config .Subject(s1 = (ISqlSubject) new SqlSubject() .Field(new Field("column1", "display1", typeof(string)))) .Subject(s2 = (ISqlSubject) new SqlSubject() .Field(new RelationField("column1", "display1", typeof(Guid), s1))); Assert.AreEqual(config.Count, 2); Assert.AreEqual(s2.Count, 1); Assert.AreEqual(s2[0].GetType(), typeof(RelationField)); RelationField f1 = (RelationField)s2[0]; Assert.AreEqual(f1.SourceName, "column1"); Assert.AreEqual(f1.DisplayName, "display1"); Assert.AreEqual(f1.DataType, typeof(Guid)); }
private static void LoadEntityRelations(Entity entity, DiskModelYaml diskModel) { var entityYaml = diskModel.Entities.FirstOrDefault(x => x.Id == entity.Id); if (entityYaml == null) { return; } foreach (var relationNode in entityYaml.Relations) { var child = entity.nHydrateModel.Entities.FirstOrDefault(x => x.Id == relationNode.ForeignEntityId); if (child != null) { entity.ChildEntities.Add(child); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasEntities; connection.InternalId = relationNode.Id; //Guid.NewGuid(); connection.IsEnforced = relationNode.IsEnforced; connection.DeleteAction = relationNode.DeleteAction.Convert <DeleteActionConstants>(); connection.RoleName = relationNode.RoleName; foreach (var relationFieldNode in relationNode.Fields) { var sourceFieldID = relationFieldNode.PrimaryFieldId; var targetFieldID = relationFieldNode.ForeignFieldId; var sourceField = entity.Fields.FirstOrDefault(x => x.Id == sourceFieldID); var targetField = entity.nHydrateModel.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == targetFieldID); if ((sourceField != null) && (targetField != null)) { var newRelationField = new RelationField(entity.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, Guid.NewGuid()) }); newRelationField.SourceFieldId = sourceFieldID; newRelationField.TargetFieldId = targetFieldID; newRelationField.RelationID = connection.Id; entity.nHydrateModel.RelationFields.Add(newRelationField); } } } } }
public override void Initialize() { m_RelationFields = Execute(RelationFieldCommandText) .Select(o => RelationField.CreateFrom(SqlHelper, o)) .ToDictionary(x => new RelationFieldKey(x.RelationName, x.FieldName)); m_RelationFieldByTypeObjectNameKey = m_RelationFields .Values .ToDictionary(rf => rf.TypeObjectNameKey); var relationFields = m_RelationFields.Values.ToLookup(x => x.RelationName); m_Relations = Execute(RelationCommandText) .Select(o => Relation.CreateFrom(SqlHelper, o, relationFields)) .ToDictionary(x => x.RelationName); m_ViewRelations = Execute(ViewRelationCommandText) .Select(o => ViewRelation.CreateFrom(SqlHelper, o)) .ToList(); m_Tables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.Persistent) .ToDictionary(x => x.RelationName); m_Views = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.View) .ToDictionary(x => x.RelationName); m_ExternalTables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.External) .ToDictionary(x => x.RelationName); m_GttTables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.GlobalTemporaryPreserve || x.MetadataRelationType == MetadataRelationType.GlobalTemporaryDelete) .ToDictionary(x => x.RelationName); }
public override void Initialize() { m_RelationFields = Execute(RelationFieldCommandText) .Select(o => RelationField.CreateFrom(SqlHelper, o)) .ToDictionary(x => new RelationFieldKey(x.RelationName, x.FieldName)); m_RelationFieldByTypeObjectNameKey = m_RelationFields .Values .ToDictionary(rf => rf.TypeObjectNameKey); var relationFields = m_RelationFields.Values.ToLookup(x => x.RelationName); m_Relations = Execute(RelationCommandText) .Select(o => Relation.CreateFrom(SqlHelper, o, relationFields)) .ToDictionary(x => x.RelationName); m_ViewRelations = Execute(ViewRelationCommandText) .Select(o => ViewRelation.CreateFrom(SqlHelper, o)) .ToList(); m_Tables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.PERSISTENT) .ToDictionary(x => x.RelationName); m_Views = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.VIEW) .ToDictionary(x => x.RelationName); m_ExternalTables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.EXTERNAL) .ToDictionary(x => x.RelationName); m_GttTables = m_Relations.Values .Where(x => x.MetadataRelationType == MetadataRelationType.GLOBAL_TEMPORARY_PRESERVE || x.MetadataRelationType == MetadataRelationType.GLOBAL_TEMPORARY_DELETE) .ToDictionary(x => x.RelationName); }
private static string GetValue(WorkOrders.PerfectView.PvRelationData data, RelationField field) { switch(field) { case RelationField.OverledenOpgeheven: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("e836ac6a-9f4f-4c88-91ab-1215cfdefa35")).Value; case RelationField.Extrainfo: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("52f6cb6a-926f-460d-ab55-3da0a4b67f2a")).Value; case RelationField.Sorteernaam: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("47b0e705-0cc4-462d-9399-518db42dc10d")).Value; case RelationField.Weergavenaam: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("4427c201-9484-4e63-bb87-598aa25c3c32")).Value; case RelationField.Aangemaaktdoor: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("33ca722b-5dcd-43af-a457-6c43e1015851")).Value; case RelationField.Aangemaaktop: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("5cd344a1-48a1-4e4f-872b-a6b41549884c")).Value; case RelationField.Gewijzigddoor: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("f11bf562-f9a6-4417-8cd7-b3d73bf829e5")).Value; case RelationField.Gewijzigdop: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("6899f229-dba6-4d98-a4f1-ba9d37f4af9e")).Value; case RelationField.Bezoekadresland: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("dbcb8f1b-803f-4321-abca-0555201e4078")).Value; case RelationField.Weblog: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("71256b0b-b2a3-4a86-bc39-06ab249fa045")).Value; case RelationField.Postadresstraat: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("e65a46aa-ba7e-4cc6-9ded-1080eba1cc7c")).Value; case RelationField.Website: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("997bf4c6-9dd0-4d42-9395-19e0aebadc73")).Value; case RelationField.Organisatienaam: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("d1d4d794-61a8-407c-bdd1-1e6827510d20")).Value; case RelationField.Postadrestoevoeging: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("6be73d9d-a95f-459d-b7ab-21ae546dc672")).Value; case RelationField.NaamKvK: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("dffb850f-ab58-4712-9068-22d1b31f5f98")).Value; case RelationField.Vervaldatumidentificatie: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("5187e77e-1243-49db-97ad-2ac510677cea")).Value; case RelationField.Factuuradresstraat: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("8efc0788-a13c-404c-9ace-30df9250dd67")).Value; case RelationField.Identificatieaanwezig: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("810f91e3-746b-4971-b5aa-33908fa19ca5")).Value; case RelationField.Bezoekadrestoevoeging: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("da76f44f-c354-4b6a-8fa6-42985e42eda2")).Value; case RelationField.Postadresextra: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("33e229d6-38a1-4e72-a5de-447918854961")).Value; case RelationField.Internenaam: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("43477e4c-a3f3-46bd-b126-45116539a6c1")).Value; case RelationField.Bezoekadresextra: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("4bdeb408-c29d-4b02-a419-47ede4c7c39f")).Value; case RelationField.BankrekeningnummerGironummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("55bc7130-7c27-40d5-a0ad-5043e27d5488")).Value; case RelationField.LinkedIn: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("107f4837-7ba2-4967-a38b-606f6b6ee9eb")).Value; case RelationField.Twitter: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("075eb39f-0bfa-44c1-9ca8-63d8c7652687")).Value; case RelationField.Crediteurnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("fbb17da4-0828-4a27-9093-65079b80b238")).Value; case RelationField.Factuuradrestoevoeging: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("85deaaf0-7f57-4d21-b19b-744d0ff046ac")).Value; case RelationField.Factuuradresland: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("55da04e8-bfff-46f9-bd00-7729bbd1588d")).Value; case RelationField.Postadresplaats: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("510b1bb5-b2d4-4558-8d6e-7d8a621cbf61")).Value; case RelationField.Aantalmedewerkers: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("bdd63d7c-b2d3-40c4-addd-7d9cc2f19398")).Value; case RelationField.Bedrijfsactiviteit: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("8026c75b-618a-4d7d-ba92-8517416f0781")).Value; case RelationField.Extranaam: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("69bb6c4a-b81b-4b3d-ba86-884a0dd36d0a")).Value; case RelationField.AfgiftedatuminschrijvingKvK: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("e3a7d5f3-6834-4fb5-a973-896b39fcea23")).Value; case RelationField.Bezoekadresplaats: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("b998f8b0-17bb-481f-99ff-8c95782c09a0")).Value; case RelationField.Facebook: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("b8d98a5b-c8e1-409b-b4d8-922ed7501f04")).Value; case RelationField.Rechtsvorm: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("78827f74-a111-4790-88c2-9274afb65fd5")).Value; case RelationField.Relatiecode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("818569ad-550c-4666-ba66-94d62a1ffc44")).Value; case RelationField.Naambank: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("ea1fb638-290b-4ba3-858a-9d07dba47c94")).Value; case RelationField.Postadresland: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("bc70a414-0521-442c-b1c4-ae19366e3def")).Value; case RelationField.Factuuradresplaats: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("da4754ac-1426-4a1e-860b-ae59df6f2cbd")).Value; case RelationField.Algemeenemailadres: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("75970ab4-dad5-4a94-b70f-ae67e7e62575")).Value; case RelationField.Debiteurnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("5ca37d6d-d218-40aa-a05a-b32737af0866")).Value; case RelationField.Bezoekadrespostcode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("040130e8-f60f-4534-9783-bcd7ce5db9c6")).Value; case RelationField.Postadrespostcode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("bef9fdcd-aca5-4a9b-9bd6-c66cca68644a")).Value; case RelationField.Factuuradrespostcode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("ac7d2dc3-8fdc-446d-8dc6-ca186bc593df")).Value; case RelationField.Algemeentelefoonnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("c8a5397b-3f3d-45a3-ba50-cb2cfa15cd2c")).Value; case RelationField.NummerKvK: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("4c4c1b0e-42bb-412d-9c34-ccc9678c2cf1")).Value; case RelationField.BTWnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("0eeb1902-7599-4a9e-bc53-cd28cd186ffd")).Value; case RelationField.Bezoekadresstraat: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("a3ede6e3-f568-4ea0-82a5-cd656dbb8728")).Value; case RelationField.Ibancode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("f5004863-d334-403e-83c0-cdb2442b8129")).Value; case RelationField.Branche: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("7d2f2141-54f4-41a0-9423-ce04cbf46b0e")).Value; case RelationField.BICcode: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("773ed094-815c-4dd1-8205-d03ca2ac55e6")).Value; case RelationField.Factuuradresextra: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("10f0ee74-ccdc-4b14-87da-dcdd4f85a602")).Value; case RelationField.Algemeenfaxnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("93e1264a-f442-4d8a-9369-dcefffb7a932")).Value; case RelationField.Factuuradresnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("8f7d1213-1c97-440a-bc65-dcf7dd996b5e")).Value; case RelationField.Postadresnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("5e5919da-bd4d-4013-ad9c-feab4ace8f3f")).Value; case RelationField.Bezoekadresnummer: return data.FieldValues.Items.First(i => i.Id == Guid.Parse("1bb1e06c-c722-40b8-8098-fef591e3cef3")).Value; } return ""; }
public static ViewField GetTargetField(this RelationField relationField, EntityHasViews relation) { return(relation.ChildView.Fields.FirstOrDefault(x => x.Id == relationField.TargetFieldId)); }
public static Field GetSourceField(this RelationField relationField, EntityHasViews relation) { return(relation.ParentEntity.Fields.FirstOrDefault(x => x.Id == relationField.SourceFieldId)); }
private static void LoadEntityRelations(string folder, Entity entity) { XmlDocument document = null; var fileName = Path.Combine(folder, entity.Name + ".relations.xml"); if (!File.Exists(fileName)) return; try { document = new XmlDocument(); document.Load(fileName); } catch (Exception ex) { //Do Nothing MessageBox.Show("The file '" + fileName + "' is not valid and could not be loaded!", "Load Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } foreach (XmlNode n in document.DocumentElement) { var isViewRelation = XmlHelper.GetAttributeValue(n, "isviewrelation", false); var isInherited = XmlHelper.GetAttributeValue(n, "isinherited", false); if (isViewRelation) //View Relation { var childid = XmlHelper.GetAttributeValue(n, "childid", Guid.Empty); var child = entity.nHydrateModel.Views.FirstOrDefault(x => x.Id == childid); if (child != null) { entity.ChildViews.Add(child); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasViews; connection.InternalId = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); connection.RoleName = XmlHelper.GetAttributeValue(n, "rolename", connection.RoleName); var relationColumnsNode = n.SelectSingleNode("relationfieldset"); if (relationColumnsNode != null) { foreach (XmlNode m in relationColumnsNode.ChildNodes) { var sourceFieldID = XmlHelper.GetAttributeValue(m, "sourcefieldid", Guid.Empty); var targetFieldID = XmlHelper.GetAttributeValue(m, "targetfieldid", Guid.Empty); var sourceField = entity.Fields.FirstOrDefault(x => x.Id == sourceFieldID); var targetField = entity.nHydrateModel.Views.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == targetFieldID); if ((sourceField != null) && (targetField != null)) { var id = XmlHelper.GetAttributeValue(m, "id", Guid.NewGuid()); var newRelationField = new RelationField(entity.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, id) }); newRelationField.SourceFieldId = sourceFieldID; newRelationField.TargetFieldId = targetFieldID; newRelationField.RelationID = connection.Id; entity.nHydrateModel.RelationFields.Add(newRelationField); } } } } } else if (isInherited) //Inheritence Relation { var parentid = XmlHelper.GetAttributeValue(n, "parentid", Guid.Empty); var parent = entity.nHydrateModel.Entities.FirstOrDefault(x => x.Id == parentid); if (parent != null) { entity.ChildDerivedEntities.Add(parent); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityInheritsEntity; connection.InternalId = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); connection.IsEnforced = XmlHelper.GetAttributeValue(n, "isenforced", connection.IsEnforced); connection.RoleName = XmlHelper.GetAttributeValue(n, "rolename", connection.RoleName); } } else //Normal Relation { var childid = XmlHelper.GetAttributeValue(n, "childid", Guid.Empty); var child = entity.nHydrateModel.Entities.FirstOrDefault(x => x.Id == childid); if (child != null) { entity.ChildEntities.Add(child); var connection = entity.Store.CurrentContext.Partitions.First().Value.ElementDirectory.AllElements.Last() as EntityHasEntities; connection.InternalId = XmlHelper.GetAttributeValue(n, "id", Guid.Empty); connection.IsEnforced = XmlHelper.GetAttributeValue(n, "isenforced", connection.IsEnforced); connection.RoleName = XmlHelper.GetAttributeValue(n, "rolename", connection.RoleName); var relationColumnsNode = n.SelectSingleNode("relationfieldset"); if (relationColumnsNode != null) { foreach (XmlNode m in relationColumnsNode.ChildNodes) { var sourceFieldID = XmlHelper.GetAttributeValue(m, "sourcefieldid", Guid.Empty); var targetFieldID = XmlHelper.GetAttributeValue(m, "targetfieldid", Guid.Empty); var sourceField = entity.Fields.FirstOrDefault(x => x.Id == sourceFieldID); var targetField = entity.nHydrateModel.Entities.SelectMany(x => x.Fields).FirstOrDefault(x => x.Id == targetFieldID); if ((sourceField != null) && (targetField != null)) { var id = XmlHelper.GetAttributeValue(m, "id", Guid.NewGuid()); var newRelationField = new RelationField(entity.Partition, new PropertyAssignment[] { new PropertyAssignment(ElementFactory.IdPropertyAssignment, id) }); newRelationField.SourceFieldId = sourceFieldID; newRelationField.TargetFieldId = targetFieldID; newRelationField.RelationID = connection.Id; entity.nHydrateModel.RelationFields.Add(newRelationField); } } } } } } }
public static void ImportLegacyModel(nHydrateModel model, Store store, nHydrateDiagram diagram, string legacyFileName) { diagram.IsLoading = true; model.IsLoading = true; try { var addedElements = new List<ModelElement>(); using (var transaction = store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { //The loading assemblies have changed names, so we must manually intervene var newFile = legacyFileName + ".converting"; nHydrate.Generator.nHydrateGeneratorProject project = null; try { File.Copy(legacyFileName, newFile); var fileText = File.ReadAllText(newFile); fileText = fileText.Replace("Widgetsphere.Generator.", "nHydrate.Generator."); fileText = fileText.Replace("WidgetsphereGeneratorProject", "nHydrateGeneratorProject"); File.WriteAllText(newFile, fileText); System.Threading.Thread.Sleep(500); project = nHydrate.Generator.Common.GeneratorFramework.GeneratorHelper.OpenModel(newFile) as nHydrate.Generator.nHydrateGeneratorProject; } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("An error occurred while importing the legacy modelRoot.", "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return; } finally { if (File.Exists(newFile)) File.Delete(newFile); } try { var oldModel = project.Model as nHydrate.Generator.Models.ModelRoot; model.TransformNames = oldModel.TransformNames; model.CompanyName = oldModel.CompanyName; model.ProjectName = oldModel.ProjectName; model.Copyright = oldModel.Copyright; model.CreatedByColumnName = oldModel.Database.CreatedByColumnName; model.CreatedDateColumnName = oldModel.Database.CreatedDateColumnName; model.DefaultNamespace = oldModel.DefaultNamespace; model.ModifiedByColumnName = oldModel.Database.ModifiedByColumnName; model.ModifiedDateColumnName = oldModel.Database.ModifiedDateColumnName; model.SQLServerType = (DatabaseTypeConstants)Enum.Parse(typeof(DatabaseTypeConstants), oldModel.SQLServerType.ToString()); model.StoredProcedurePrefix = oldModel.StoredProcedurePrefix; model.TenantPrefix = oldModel.TenantPrefix; model.AllowMocks = oldModel.AllowMocks; model.TimestampColumnName = oldModel.Database.TimestampColumnName; model.UseUTCTime = oldModel.UseUTCTime; model.Version = oldModel.Version; #region Load Tables foreach (var table in oldModel.Database.Tables.ToList()) { var newEntity = new Entity(model.Partition); model.Entities.Add(newEntity); addedElements.Add(newEntity); newEntity.AllowAuditTracking = table.AllowAuditTracking; newEntity.AllowCreateAudit = table.AllowCreateAudit; newEntity.AllowModifyAudit = table.AllowModifiedAudit; newEntity.AllowTimestamp = table.AllowTimestamp; newEntity.CodeFacade = table.CodeFacade; newEntity.Summary = table.Description; newEntity.Immutable = table.Immutable; newEntity.IsAssociative = table.AssociativeTable; newEntity.IsGenerated = table.Generated; newEntity.TypedEntity = (TypedEntityConstants)Enum.Parse(typeof(TypedEntityConstants), table.TypedTable.ToString(), true); newEntity.Name = table.Name; newEntity.Schema = table.DBSchema; //DO NOT IMPORT METADATA #region Load the columns var maxSortOrder = 1; foreach (var column in table.GetColumns()) { var newField = new Field(model.Partition); newEntity.Fields.Add(newField); newField.CodeFacade = column.CodeFacade; newField.Collate = column.Collate; newField.DataType = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), column.DataType.ToString()); newField.Default = column.Default; newField.Summary = column.Description; newField.Formula = column.Formula; newField.FriendlyName = column.FriendlyName; newField.Identity = (IdentityTypeConstants)Enum.Parse(typeof(IdentityTypeConstants), column.Identity.ToString()); newField.IsCalculated = column.ComputedColumn; newField.IsGenerated = column.Generated; newField.IsPrimaryKey = column.PrimaryKey; newField.SortOrder = maxSortOrder++; //Do not reset as it creates 2 indexes with PK if (!newField.IsPrimaryKey) newField.IsIndexed = column.IsIndexed; newField.IsReadOnly = column.IsReadOnly; newField.IsUnique = column.IsUnique; newField.Length = column.Length; newField.Max = column.Max; newField.Min = column.Min; newField.Name = column.Name; newField.Nullable = column.AllowNull; newField.Scale = column.Scale; newField.IsBrowsable = column.IsBrowsable; newField.ValidationExpression = column.ValidationExpression; } #endregion #region Composites foreach (var component in table.ComponentList.ToList()) { var newComposite = new Composite(model.Partition); newEntity.Composites.Add(newComposite); addedElements.Add(newComposite); newComposite.CodeFacade = component.CodeFacade; newComposite.Summary = component.Description; newComposite.Name = component.Name; newComposite.IsGenerated = component.Generated; //Add the fields by looking them up in the new table foreach (var column in component.GetColumns()) { var checkColumn = table.GetColumns().FirstOrDefault(x => x.Key == column.Key); if (checkColumn != null) { var tableField = newEntity.Fields.FirstOrDefault(x => x.Name == checkColumn.Name); if (tableField != null) { var newField = new CompositeField(model.Partition); newComposite.Fields.Add(newField); newField.FieldId = tableField.Id; } } } } #endregion #region Load Static Data var index = 1; foreach (nHydrate.Generator.Models.RowEntry data in table.StaticData) { var isProcessed = false; foreach (nHydrate.Generator.Models.CellEntry cellEntry in data.CellEntries) { var column = cellEntry.ColumnRef.Object as nHydrate.Generator.Models.Column; if (column != null) { var newColumn = newEntity.Fields.FirstOrDefault(x => x.Name == column.Name); if (newColumn != null) { var newData = new StaticData(model.Partition); newEntity.StaticDatum.Add(newData); newData.ColumnKey = newColumn.Id; newData.Value = cellEntry.Value; newData.OrderKey = index; isProcessed = true; } } } if (isProcessed) index++; } #endregion } foreach (var table in oldModel.Database.Tables.ToList()) { if (table.ParentTable != null) { var child = model.Entities.FirstOrDefault(x => x.Name == table.Name); var parent = model.Entities.FirstOrDefault(x => x.Name == table.ParentTable.Name); child.ParentInheritedEntity = parent; } } #endregion #region Load Relations foreach (nHydrate.Generator.Models.Table table in oldModel.Database.Tables) { foreach (nHydrate.Generator.Models.Relation relation in table.GetRelations()) { var entity1 = model.Entities.First(x => x.Name == relation.ParentTable.Name); var entity2 = model.Entities.First(x => x.Name == relation.ChildTable.Name); if (entity2.ParentInheritedEntity != entity1) { entity1.ChildEntities.Add(entity2); var newRelation = entity1.RelationshipList.First(x => x.SourceEntity == entity1 && x.TargetEntity == entity2 && !x.FieldMapList().Any()); newRelation.RoleName = relation.RoleName; foreach (nHydrate.Generator.Models.ColumnRelationship relationColumn in relation.ColumnRelationships) { var column1 = entity1.Fields.First(x => x.Name == relationColumn.ParentColumn.Name); var column2 = entity2.Fields.First(x => x.Name == relationColumn.ChildColumn.Name); var newRelationField = new RelationField(model.Partition); model.RelationFields.Add(newRelationField); newRelationField.SourceFieldId = column1.Id; newRelationField.TargetFieldId = column2.Id; newRelationField.RelationID = newRelation.Id; } } } } #endregion #region Load Views foreach (nHydrate.Generator.Models.CustomView item in oldModel.Database.CustomViews) { var newitem = new nHydrate.Dsl.View(model.Partition); model.Views.Add(newitem); addedElements.Add(newitem); newitem.CodeFacade = item.CodeFacade; newitem.Summary = item.Description; newitem.IsGenerated = item.Generated; newitem.Name = item.Name; newitem.Schema = item.DBSchema; newitem.SQL = item.SQL; foreach (var column in item.GetColumns()) { var newColumn = new ViewField(model.Partition); newitem.Fields.Add(newColumn); newColumn.DataType = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), column.DataType.ToString()); newColumn.Default = column.Default; newColumn.Summary = column.Description; newColumn.FriendlyName = column.FriendlyName; newColumn.Length = column.Length; newColumn.IsGenerated = column.Generated; //newColumn.Max = column.ma; //newColumn.Min = column.; newColumn.Name = column.Name; newColumn.Nullable = column.AllowNull; newColumn.Scale = column.Scale; } } #endregion #region Load Stored Procedures foreach (nHydrate.Generator.Models.CustomStoredProcedure item in oldModel.Database.CustomStoredProcedures) { var newitem = new StoredProcedure(model.Partition); model.StoredProcedures.Add(newitem); addedElements.Add(newitem); newitem.CodeFacade = item.CodeFacade; newitem.Summary = item.Description; newitem.IsGenerated = item.Generated; newitem.IsExisting = item.IsExisting; newitem.Name = item.Name; newitem.Schema = item.DBSchema; newitem.SQL = item.SQL; newitem.DatabaseObjectName = item.DatabaseObjectName; foreach (var parameter in item.GetParameters()) { var newParameter = new StoredProcedureParameter(model.Partition); newitem.Parameters.Add(newParameter); newParameter.Nullable = parameter.AllowNull; newParameter.DataType = (nHydrate.Dsl.DataTypeConstants)Enum.Parse(typeof(nHydrate.Dsl.DataTypeConstants), parameter.DataType.ToString()); newParameter.Default = parameter.Default; newParameter.Summary = parameter.Description; newParameter.IsGenerated = parameter.Generated; newParameter.IsOutputParameter = parameter.IsOutputParameter; newParameter.Length = parameter.Length; newParameter.Scale = parameter.Scale; newParameter.Name = parameter.Name; } foreach (var column in item.GetColumns()) { var newColumn = new StoredProcedureField(model.Partition); newitem.Fields.Add(newColumn); newColumn.DataType = (DataTypeConstants)Enum.Parse(typeof(DataTypeConstants), column.DataType.ToString()); newColumn.Default = column.Default; newColumn.Summary = column.Description; newColumn.FriendlyName = column.FriendlyName; newColumn.Length = column.Length; //newColumn.Max = column.ma; //newColumn.Min = column.; newColumn.Name = column.Name; newColumn.Nullable = column.AllowNull; newColumn.Scale = column.Scale; } } #endregion nHydrateSerializationHelper.LoadInitialIndexes(model); transaction.Commit(); } catch (Exception ex) { throw; } } using (var transaction = store.TransactionManager.BeginTransaction(Guid.NewGuid().ToString())) { diagram.AutoLayoutShapeElements( diagram.NestedChildShapes.Where(x => addedElements.Contains(x.ModelElement)).ToList(), Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.VGRoutingStyle.VGRouteTreeNS, Microsoft.VisualStudio.Modeling.Diagrams.GraphObject.PlacementValueStyle.VGPlaceNS, true); transaction.Commit(); } } catch (Exception ex) { throw; } finally { diagram.IsLoading = false; model.IsLoading = false; } }