internal void OverwriteAttributeTypeWithRelationshipInfo(DataRow row, EntityMetadataReader reader)
        {
            var attributeName = row[ColumnForAttributeName] as string;

            var metadata = reader.GetRelationShipByReferencingAttribute(attributeName);

            if (metadata == null)
                return;

            row[ColumnForAttributeType] = string.Format("Lookup[RefEntity:{0}][RefColumnName:{1}]",
                metadata.ReferencedEntity, metadata.ReferencedAttribute);
        }
        private void QueryEntityMetadata()
        {
            WorkAsync("Querying Entity List",
                e => // Work To Do Asynchronously
                {
                    var request = new RetrieveAllEntitiesRequest
                    {
                        EntityFilters = EntityFilters.Entity,
                        RetrieveAsIfPublished = true
                    };

                    e.Result = Service.Execute(request);
                }, e =>
                {
                    var reader = new EntityMetadataReader(e.Result as OrganizationResponse);
                    entityDropdown.DataSource = reader.ParseEntityList();
                });
        }
        private void QueryRelationshipMetadata()
        {
            WorkAsync("Querying Relationships for Selected Entity: " + entityDropdown.SelectedValue,
                e => // Work To Do Asynchronously
                {
                    var request = new RetrieveAllEntitiesRequest
                    {
                        EntityFilters = EntityFilters.Relationships,
                        RetrieveAsIfPublished = true
                    };

                   e.Result = Service.Execute(request);
                }, e =>
                {
                    var reader = new EntityMetadataReader(e.Result as OrganizationResponse);
                    relationShipDropdown.DataSource = reader.ParseRelationships(entityDropdown.SelectedValue as string);

                    var formUpdater = new GridUpdater(entityAttributeView)
                    {
                        ColumnForAttributeName = "Logical Name",
                        ColumnForAttributeType = "Attribute Type"
                    };
                    formUpdater.Where(row => row[formUpdater.ColumnForAttributeType] as string == "Lookup")
                        .ForEach(x => formUpdater.OverwriteAttributeTypeWithRelationshipInfo(x, reader));
                    formUpdater.Refresh();
                });
        }
        private void QueryAttributeMetadata()
        {
            WorkAsync("Querying Attributes for Selected Entity: " + entityDropdown.SelectedValue,
                e => // Work To Do Asynchronously
                {
                    var request = new RetrieveAllEntitiesRequest
                    {
                        EntityFilters = EntityFilters.Attributes,
                        RetrieveAsIfPublished = true
                    };

                    var response = Service.Execute(request);

                    var reader = new EntityMetadataReader(response);
                    e.Result = reader.ParseAttributes(entityDropdown.SelectedValue as string);
                },
                e => // Cleanup when work has completed
                    SafeSetDataSource(entityAttributeView, e.Result));
        }