Esempio n. 1
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
 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}."),
     });
Esempio n. 3
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 4
0
        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}.");
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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());
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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 "";
 }
Esempio n. 12
0
 public static ViewField GetTargetField(this RelationField relationField, EntityHasViews relation)
 {
     return(relation.ChildView.Fields.FirstOrDefault(x => x.Id == relationField.TargetFieldId));
 }
Esempio n. 13
0
 public static Field GetSourceField(this RelationField relationField, EntityHasViews relation)
 {
     return(relation.ParentEntity.Fields.FirstOrDefault(x => x.Id == relationField.SourceFieldId));
 }
Esempio n. 14
0
        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);
                                }
                            }
                        }
                    }

                }

            }

        }
Esempio n. 15
0
        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;
            }

        }