public void Equals_Claus_With_Two_Entity_Values()
        {
            var dataType = new DataTypeDefinition(-1, "Test")
            {
                Id = 12345
            };
            Expression <Func <PropertyType, bool> > predicate = p => p.DataTypeDefinitionId == dataType.Id;
            var modelToSqlExpressionHelper = new ModelToSqlExpressionVisitor <PropertyType>();
            var result = modelToSqlExpressionHelper.Visit(predicate);

            Debug.Print("Model to Sql ExpressionHelper: \n" + result);

            Assert.AreEqual("([cmsPropertyType].[dataTypeId] = @0)", result);
            Assert.AreEqual(12345, modelToSqlExpressionHelper.GetSqlParameters()[0]);
        }
Example #2
0
        public void TestIsParserForValidDataType()
        {
            // arrange
            var dataTypeDefinition = new DataTypeDefinition(global::Umbraco.Core.Constants.PropertyEditors.GridAlias);

            var gridConfigMock = new Mock <IGridConfig>();

            var parser = new GridParser(gridConfigMock.Object);

            // act
            var result = parser.IsParserFor(dataTypeDefinition);

            // verify
            Assert.IsTrue(result);
        }
Example #3
0
        public void TestIsParserForInValidDataType()
        {
            // arrange
            var dataTypeDefinition = new DataTypeDefinition("foo");

            var gridConfigMock = new Mock <IGridConfig>();

            var parser = new GridParser(gridConfigMock.Object);

            // act
            var result = parser.IsParserFor(dataTypeDefinition);

            // verify
            Assert.IsFalse(result);
        }
        private ProductDefinitionField CreateProductDefinitionField(string name, DataTypeDefinition definition)
        {
            var productDefinitionField = new ProductDefinitionField()
            {
                DataType       = _dataTypeRepository.Select().FirstOrDefault(x => x.DefinitionName == definition.Name),
                Name           = name,
                RenderInEditor = true,
            };

            var descriptions = CreateDefinitionFieldsDescriptions(name);

            descriptions.ForEach(productDefinitionField.AddProductDefinitionFieldDescription);

            return(productDefinitionField);
        }
Example #5
0
        private int?CreateDocumentType(Item item, int parentId, int userId = 0)
        {
            ContentType contentType = new ContentType(parentId);

            contentType.Name  = item.Name;
            contentType.Alias = item.Alias;
            contentType.Icon  = "icon-message";

            var textstringDef      = new DataTypeDefinition(-1, "Umbraco.Textbox");
            var richtextEditorDef  = new DataTypeDefinition(-1, "Umbraco.TinyMCEv3");
            var textboxMultipleDef = new DataTypeDefinition(-1, "Umbraco.TextboxMultiple");

            if (item.Tabs != null && item.Tabs.Any())
            {
                foreach (var tab in item.Tabs)
                {
                    if (!string.IsNullOrEmpty(tab.Name))
                    {
                        contentType.AddPropertyGroup(tab.Name);

                        foreach (var property in tab.Properties)
                        {
                            contentType.AddPropertyType(
                                new PropertyType(textstringDef)
                            {
                                Alias       = property.Alias,
                                Name        = property.Name,
                                Description = "",
                                Mandatory   = property.Mandatory,
                                SortOrder   = 1
                            },
                                tab.Name);
                        }
                    }
                }
            }

            _contentTypeService.Save(contentType);

            if (contentType != null)
            {
                return(contentType.Id);
            }
            else
            {
                return(parentId);
            }
        }
Example #6
0
        public void PropertyType_Make_New()
        {
            var allDataTypes = DataTypeDefinition.GetAll().ToList(); //get all definitions
            var contentTypes = DocumentType.GetAllAsList();

            var name = "TEST" + Guid.NewGuid().ToString("N");
            var pt   = PropertyType.MakeNew(allDataTypes.First(), contentTypes.First(), name, name);

            Assert.IsTrue(pt.Id > 0);
            Assert.IsInstanceOfType(pt, typeof(PropertyType));

            pt.delete();

            //make sure it's gone
            Assert.IsFalse(PropertyType.GetAll().Select(x => x.Id).Contains(pt.Id));
        }
Example #7
0
        public static void CreateTrueFalseDataType(string name)
        {
            var dataTypeService = ApplicationContext.Current.Services.DataTypeService;

            var dataType = dataTypeService.GetDataTypeDefinitionByName(name);

            if (dataType == null)
            {
                dataType = new DataTypeDefinition("Umbraco.TrueFalse")
                {
                    Name = name
                };

                dataTypeService.Save(dataType);
            }
        }
        private void CreateLinksPickerDataType()
        {
            var dataTypeService = ApplicationContext.Current.Services.DataTypeService;

            var folderTypeDataType = dataTypeService.GetDataTypeDefinitionByName(DataTypeNames.LinksPicker);

            if (folderTypeDataType == null)
            {
                folderTypeDataType = new DataTypeDefinition(-1, DataTypePropertyEditors.LinksPicker)
                {
                    Name = DataTypeNames.LinksPicker
                };

                dataTypeService.Save(folderTypeDataType);
            }
        }
Example #9
0
        private DataTypeItem BuildDataTypeItem(DataTypeDefinition dataTypeDefinition)
        {
            var dataTypeItem = new DataTypeItem();

            dataTypeItem.Id = dataTypeDefinition.DataType.DataTypeDefinitionId;
            dataTypeItem.ControlTypeName = dataTypeDefinition.DataType.GetType().FullName;

            var node = new CMSNode(dataTypeItem.Id);

            dataTypeItem.DataTypeName = node.Text;

            dataTypeItem.PreValueItems = this.BuildPreValues(dataTypeDefinition);
            dataTypeItem.Type          = this.DetermineType(dataTypeItem);
            dataTypeItem.ModelType     = DetermineModelType(dataTypeItem);
            return(dataTypeItem);
        }
Example #10
0
        /// <summary>
        /// Adding a PropertyType to the ContentType, will add a new datafield/Property on all Documents of this Type.
        /// </summary>
        /// <param Name="dt">The DataTypeDefinition of the PropertyType</param>
        /// <param Name="Alias">The Alias of the PropertyType</param>
        /// <param Name="Name">The userfriendly Name</param>
        public void AddPropertyType(DataTypeDefinition dt, string Alias, string Name)
        {
            PropertyType pt = PropertyType.MakeNew(dt, this, Name, Alias);

            // Optimized call
            Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteNonQuery(GlobalSettings.DbDSN, CommandType.Text,
                                                                       "insert into cmsPropertyData (contentNodeId, versionId, propertyTypeId) select contentId, versionId, @propertyTypeId from cmsContent inner join cmsContentVersion on cmsContent.nodeId = cmsContentVersion.contentId where contentType = @contentTypeId",
                                                                       new SqlParameter("@propertyTypeId", pt.Id),
                                                                       new SqlParameter("@contentTypeId", Id));

//			foreach (Content c in Content.getContentOfContentType(this))
//				c.addProperty(pt,c.Version);

            // Remove from cache
            FlushFromCache(Id);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //get the settings for item usage datatype from datatype settings in developer section
            var dataTypeDefinitions = DataTypeDefinition.GetAll().Where(dataTypeDef => dataTypeDef.Text == "Item Usage Datatype");

            if (!dataTypeDefinitions.Any())
            {
                usageControl.Visible = false;
                litMessage.Text      = "There is no page usage data available - create a datatype called \"Item Usage Datatype\" and configure it to activate.";
            }
            else
            {
                var s = GetDataTypeSettingsForItemDataUsage(dataTypeDefinitions);
                PassSettingsToItemUsageUserControl(s);
            }
        }
Example #12
0
        public void Can_Get_Pre_Value_Collection_With_Cache()
        {
            var provider   = new PetaPocoUnitOfWorkProvider(Logger);
            var unitOfWork = provider.GetUnitOfWork();

            var cache = new CacheHelper(new ObjectCacheRuntimeCacheProvider(), new StaticCacheProvider(), new StaticCacheProvider());

            Func <DataTypeDefinitionRepository> creator = () => new DataTypeDefinitionRepository(
                unitOfWork, CacheHelper.CreateDisabledCacheHelper(),
                cache,
                Mock.Of <ILogger>(), SqlSyntax,
                new ContentTypeRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of <ILogger>(), SqlSyntax,
                                          new TemplateRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of <ILogger>(), SqlSyntax, Mock.Of <IFileSystem>(), Mock.Of <IFileSystem>(), Mock.Of <ITemplatesSection>())));

            DataTypeDefinition dtd;

            using (var repository = creator())
            {
                dtd = new DataTypeDefinition(-1, new Guid(Constants.PropertyEditors.RadioButtonList))
                {
                    Name = "test"
                };
                repository.AddOrUpdate(dtd);
                unitOfWork.Commit();
            }

            DatabaseContext.Database.Insert(new DataTypePreValueDto()
            {
                DataTypeNodeId = dtd.Id, SortOrder = 0, Value = "test1"
            });
            DatabaseContext.Database.Insert(new DataTypePreValueDto()
            {
                DataTypeNodeId = dtd.Id, SortOrder = 1, Value = "test2"
            });

            //this will cache the result
            using (var repository = creator())
            {
                var collection = repository.GetPreValuesCollectionByDataTypeId(dtd.Id);
            }

            var cached = cache.RuntimeCache.GetCacheItemsByKeySearch <PreValueCollection>(CacheKeys.DataTypePreValuesCacheKey + dtd.Id + "-");

            Assert.IsNotNull(cached);
            Assert.AreEqual(1, cached.Count());
            Assert.AreEqual(2, cached.Single().FormatAsDictionary().Count);
        }
Example #13
0
        private void OverrideYouTrack()
        {
            var migrationName = MethodBase.GetCurrentMethod().Name;

            try
            {
                var path = HostingEnvironment.MapPath(MigrationMarkersPath + migrationName + ".txt");
                if (File.Exists(path))
                {
                    return;
                }

                var contentTypeService = UmbracoContext.Current.Application.Services.ContentTypeService;
                var releaseContentType = contentTypeService.GetContentType("Release");
                var propertyTypeAlias  = "overrideYouTrackDescription";
                if (releaseContentType.PropertyTypeExists(propertyTypeAlias) == false)
                {
                    var checkbox             = new DataTypeDefinition("Umbraco.TrueFalse");
                    var checkboxPropertyType = new PropertyType(checkbox, propertyTypeAlias)
                    {
                        Name = "Override YouTrack Description?"
                    };
                    releaseContentType.AddPropertyType(checkboxPropertyType, "Content");
                    contentTypeService.Save(releaseContentType);
                }

                propertyTypeAlias = "overrideYouTrackReleaseDate";
                if (releaseContentType.PropertyTypeExists(propertyTypeAlias) == false)
                {
                    var textbox             = new DataTypeDefinition("Umbraco.Textbox");
                    var textboxPropertyType = new PropertyType(textbox, propertyTypeAlias)
                    {
                        Name = "Override YouTrack release date"
                    };
                    releaseContentType.AddPropertyType(textboxPropertyType, "Content");
                    contentTypeService.Save(releaseContentType);
                }

                string[] lines = { "" };
                File.WriteAllLines(path, lines);
            }
            catch (Exception ex)
            {
                LogHelper.Error <MigrationsHandler>(string.Format("Migration: '{0}' failed", migrationName), ex);
            }
        }
Example #14
0
        private List <string> GetFields(Guid dataTypeId)
        {
            var fields = new List <string>();
            IEnumerable <DataTypeDefinition> dataTypeDefinitions = DataTypeDefinition.GetAll().Where(d => d.DataType != null && d.DataType.Id == dataTypeId);

            foreach (var dtd in dataTypeDefinitions)
            {
                fields.AddRange(from pt in PropertyType.GetByDataTypeDefinition(dtd.Id) select pt.Alias);
            }

            if (dataTypeId == new Guid("5e9b75ae-face-41c8-b47e-5f4b0fd82f83"))
            {
                fields = fields.Select(field => "rteLink" + field).ToList();
            }

            return(fields.Distinct().ToList());
        }
        public void DataTypeService_Can_Persist_New_DataTypeDefinition()
        {
            // Arrange
            var dataTypeService = ServiceContext.DataTypeService;

            // Act
            var dataTypeDefinition = new DataTypeDefinition(-1, "Test.TestEditor")
            {
                Name = "Testing Textfield", DatabaseType = DataTypeDatabaseType.Ntext
            };

            dataTypeService.Save(dataTypeDefinition);

            // Assert
            Assert.That(dataTypeDefinition, Is.Not.Null);
            Assert.That(dataTypeDefinition.HasIdentity, Is.True);
        }
Example #16
0
        public IDataTypeDefinition Create(string name, string propertyEditorAlias, int parentId,
                                          DataTypeDatabaseType databaseType, IDictionary <string, string> preValues)
        {
            if (Exists(name))
            {
                return(null);
            }

            var dataType = new DataTypeDefinition(propertyEditorAlias)
            {
                Name         = name,
                DatabaseType = databaseType,
            };

            if (parentId > 0)
            {
                dataType.ParentId = parentId;
            }

            _dataTypeService.Save(dataType);

            var itemPreValues = _dataTypeService.GetPreValuesCollectionByDataTypeId(dataType.Id)
                                .FormatAsDictionary();


            foreach (var preValue in preValues)
            {
                LogHelper.Info <DataTypeBuilder>("PreValue: {0} [{1}]", () => preValue.Key, () => preValue.Value);

                if (itemPreValues.ContainsKey(preValue.Key))
                {
                    LogHelper.Info <DataTypeBuilder>("Update");
                    itemPreValues[preValue.Key].Value = preValue.Value;
                }
                else
                {
                    LogHelper.Info <DataTypeBuilder>("Add");
                    itemPreValues.Add(preValue.Key, new PreValue(preValue.Value));
                }
            }

            _dataTypeService.SavePreValues(dataType, itemPreValues);
            _dataTypeService.Save(dataType);

            return(dataType);
        }
Example #17
0
        public void DataTypeService_Can_Persist_New_DataTypeDefinition()
        {
            // Arrange
            var dataTypeService = ServiceContext.DataTypeService;
            var textfieldId     = new Guid("ec15c1e5-9d90-422a-aa52-4f7622c63bea");

            // Act
            var dataTypeDefinition = new DataTypeDefinition(-1, textfieldId)
            {
                Name = "Testing Textfield", DatabaseType = DataTypeDatabaseType.Ntext
            };

            dataTypeService.Save(dataTypeDefinition);

            // Assert
            Assert.That(dataTypeDefinition, Is.Not.Null);
            Assert.That(dataTypeDefinition.HasIdentity, Is.True);
        }
Example #18
0
        public DataType Create(string name, string propertyEditor, DataTypeDatabaseType databaseType = DataTypeDatabaseType.Ntext)
        {
            var allDataTypeDefinitions = UmbracoUtils.DataTypeService.GetAllDataTypeDefinitions();

            if (allDataTypeDefinitions.Any(x => x.Name == name))
            {
                throw new FluentException(string.Format("Cannot create Data Type Definition `{0}` as it already exists.", name));
            }

            var newDataTypeDefinition = new DataTypeDefinition(-1, propertyEditor)
            {
                Name = name, DatabaseType = databaseType
            };

            UmbracoUtils.DataTypeService.Save(newDataTypeDefinition);

            return(new DataType(newDataTypeDefinition, UmbracoUtils.UmbracoDatabase, UmbracoUtils.DataTypeService));
        }
        private void CreatePagePromotionDataType()
        {
            var dataTypeService = ApplicationContext.Current.Services.DataTypeService;

            var dataType = dataTypeService.GetDataTypeDefinitionByName(PagePromotionInstallationConstants.DataTypeNames.PagePromotion);

            if (dataType != null)
            {
                return;
            }

            dataType = new DataTypeDefinition(-1, "custom.PagePromotion")
            {
                Name = PagePromotionInstallationConstants.DataTypeNames.PagePromotion
            };

            dataTypeService.Save(dataType);
        }
Example #20
0
        /// <summary>
        /// Gets the insert data types.
        /// </summary>
        /// <returns>
        /// </returns>
        private List <StoredValue> GetInsertDataTypes()
        {
            var list = new List <StoredValue>();

            foreach (var config in this.ColumnConfigurations)
            {
                var dtd = DataTypeDefinition.GetDataTypeDefinition(config.DataTypeId);
                var dt  = dtd.DataType;

                var s = new StoredValue {
                    Name = config.Name, Alias = config.Alias, Value = dt
                };

                list.Add(s);
            }

            return(list);
        }
Example #21
0
        private void CreateMemberChangesWatcherDataType()
        {
            var dataTypeService = ApplicationContext.Current.Services.DataTypeService;
            var dataType        = dataTypeService.GetDataTypeDefinitionByName(DataTypeNames.MemberChangesWatcher);

            if (dataType != null)
            {
                return;
            }

            dataType = new DataTypeDefinition(DataTypePropertyEditors.MemberChangesWatcher)
            {
                Name         = DataTypeNames.MemberChangesWatcher,
                DatabaseType = DataTypeDatabaseType.Nvarchar
            };

            dataTypeService.Save(dataType);
        }
        public bool Execute(string packageName, XmlNode xmlData)
        {
            Initialize(xmlData);

            IEnumerable <IDataTypeDefinition> dataTypeDefinitions = ApplicationContext.Current.Services.DataTypeService.GetDataTypeDefinitionByPropertyEditorAlias(_alias);

            if (!dataTypeDefinitions.Any())
            {
                DataTypeDefinition dataTypeDefinition = new DataTypeDefinition(-1, _alias)
                {
                    Name         = _name,
                    DatabaseType = _alias != "TeaCommerce.StockManagement" ? DataTypeDatabaseType.Integer : DataTypeDatabaseType.Nvarchar
                };
                ApplicationContext.Current.Services.DataTypeService.Save(dataTypeDefinition);
            }

            return(true);
        }
Example #23
0
        private void AddContentPagePicker()
        {
            var services             = ApplicationContext.Current.Services;
            var dtdService           = services.DataTypeService;
            var contentPagePickerDtd = dtdService.GetDataTypeDefinitionByName(dataTypeName);

            if (contentPagePickerDtd == null)
            {
                contentPagePickerDtd = new DataTypeDefinition(-1, "Umbraco.MultiNodeTreePicker2")
                {
                    Name = dataTypeName
                };
                var preValues = new Dictionary <string, PreValue>
                {
                    { "startNode", new PreValue(new { type = "content", query = $"$root/{CoreInstallationConstants.DocumentTypeAliases.HomePage}" }.ToJson()) },
                    { "filter", new PreValue(CoreInstallationConstants.DocumentTypeAliases.ContentPage) },
                    { "minNumber", new PreValue("0") },
                    { "maxNumber", new PreValue("1") },
                    { "showOpenButton", new PreValue("0") }
                };
                dtdService.SaveDataTypeAndPreValues(contentPagePickerDtd, preValues);
            }

            var contentTypeService = services.ContentTypeService;
            var page = contentTypeService.GetContentType(CoreInstallationConstants.DocumentTypeAliases.HomePage);

            if (page == null)
            {
                return;
            }
            if (page.PropertyTypeExists(propertyAlias))
            {
                return;
            }
            var property = new PropertyType(contentPagePickerDtd)
            {
                Name  = propertyName,
                Alias = propertyAlias
            };

            page.AddPropertyGroup(NavigationInstallationConstants.DocumentTypeTabNames.Navigation);
            page.AddPropertyType(property, NavigationInstallationConstants.DocumentTypeTabNames.Navigation);
            contentTypeService.Save(page);
        }
        public void DataTypeService_Can_Get_All()
        {
            var dataTypeService = ServiceContext.DataTypeService;

            IDataTypeDefinition dataTypeDefinition = new DataTypeDefinition(-1, "Test.TestEditor")
            {
                Name = "Testing Textfield", DatabaseType = DataTypeDatabaseType.Ntext
            };

            dataTypeService.Save(dataTypeDefinition);

            //Get all the first time (no cache)
            var all = dataTypeService.GetAllDataTypeDefinitions();

            //Get all a second time (with cache)
            all = dataTypeService.GetAllDataTypeDefinitions();

            Assert.Pass();
        }
        private static PropertyType CreateAndAddPropertyTypeToDocumentType(string propertyAlias, ContentType documentType, DocumentTypePropertyAttribute propertyAttribute)
        {
            var dataTypeDefinition = DataTypeDefinition.GetDataTypeDefinition(propertyAttribute.DataTypeId);

            if (dataTypeDefinition == null)
            {
                throw new DataTypeDefinitionUnknownException(propertyAttribute.DataTypeId);
            }

            var propertyType = documentType.AddPropertyType(dataTypeDefinition, propertyAlias, propertyAttribute.Name);

            SetPropertyTypeMandatoryIfDifferent(propertyType, propertyAttribute.Mandatory);
            SetPropertyTypeValidationExpressionIfDifferent(propertyType, propertyAttribute.ValidationExpression);
            SetPropertyTypeSortOrderIfDifferent(propertyType, propertyAttribute.SortOrder);
            SetPropertyTypeDescriptionIfDifferent(propertyType, propertyAttribute.Description);
            SetPropertyTypeTabIfDifferent(documentType, propertyType, propertyAttribute.Tab);

            return(propertyType);
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            var parent = this.Parent;

            while (parent != null && !(parent is TabPage))
            {
                parent = parent.Parent;
            }
            if (parent != null)
            {
                ((TabPage)parent).Menu.NewElement("div", "tinyMCEMenu1", "tinymceMenuBar", 0);
                DataTypeDefinition dataTypeDefinition1 = DataTypeDefinition.GetDataTypeDefinition(Configuration.TinyMceDataTypeId);
                tinyMce = (umbraco.editorControls.tinyMCE3.TinyMCE)dataTypeDefinition1.DataType.DataEditor;
                tinyMce.config.Add("umbraco_toolbar_id", "tinyMCEMenu1");
                tinyMce.ID = "HtmlBodyTextBox";
            }
        }
Example #27
0
        public override void Render(ref XmlTree tree)
        {
            foreach (DataTypeDefinition dt in DataTypeDefinition.GetAll())
            {
                XmlTreeNode xNode = XmlTreeNode.Create(this);
                xNode.NodeID   = dt.Id.ToString();
                xNode.Text     = dt.Text;
                xNode.Action   = "javascript:openDataType(" + dt.Id + ");";
                xNode.Icon     = "developerDatatype.gif";
                xNode.OpenIcon = "developerDatatype.gif";

                OnBeforeNodeRender(ref tree, ref xNode, EventArgs.Empty);
                if (xNode != null)
                {
                    tree.Add(xNode);
                    OnAfterNodeRender(ref tree, ref xNode, EventArgs.Empty);
                }
            }
        }
            protected object ConvertDbToString_Fake(string propEditorAlias, string propAlias, object value)
            {
                // Create a fake DTD
                var fakeDtd = new DataTypeDefinition(-1, propEditorAlias);

                // Create a fake property type
                var fakePropType = new PropertyType(fakeDtd)
                {
                    Alias = propAlias
                };

                // Create a fake property
                var fakeProp = new Property(fakePropType, value);

                // Lookup the property editor
                var fakePropEditor = PropertyEditorResolver.Current.GetByAlias(propEditorAlias);

                return(fakePropEditor.ValueEditor.ConvertDbToString(fakeProp, fakePropType, ApplicationContext.Current.Services.DataTypeService));
            }
Example #29
0
        /// <summary>
        /// Fix for incompatible Umbraco versions
        /// </summary>
        /// <param name="contentType">Type of the content.</param>
        /// <param name="dt">The dt.</param>
        /// <param name="alias">The alias.</param>
        /// <param name="name">The name.</param>
        /// <param name="tabName">Name of the tab.</param>
        public static void AddPropertyType(IContentTypeBase contentType, DataTypeDefinition dt, string alias, string name, string tabName)
        {
            IDataTypeDefinition idt = DataTypeService.GetDataTypeDefinitionById(dt.Id);

            Umbraco.Core.Models.PropertyType pt = new Umbraco.Core.Models.PropertyType(idt)
            {
                Alias = alias,
                Name  = name
            };

            if (String.IsNullOrEmpty(tabName))
            {
                contentType.AddPropertyType(pt);
            }
            else
            {
                contentType.AddPropertyType(pt, tabName);
            }
        }
Example #30
0
        private void CreateMemberTypesIfRequired(ApplicationContext context)
        {
            var       memberType        = context.Services.MemberTypeService.Get("member");
            var       textBoxDefinition = new DataTypeDefinition(-1, "text");
            const int textStringId      = -88;
            const int numericId         = -51;
            var       numericDefinition = new DataTypeDefinition(-1, "numeric");

            var updated = false;

            if (!memberType.PropertyTypeExists("firstName"))
            {
                var propertyType = new PropertyType(textBoxDefinition)
                {
                    Alias = "firstName", DataTypeDefinitionId = textStringId, Name = "First Name", Description = "", Mandatory = false, SortOrder = 1
                };

                memberType.AddPropertyType(propertyType, "Membership");
                updated = true;
            }
            if (!memberType.PropertyTypeExists("lastName"))
            {
                memberType.AddPropertyType(new PropertyType(textBoxDefinition)
                {
                    Alias = "lastName", DataTypeDefinitionId = textStringId, Name = "Last Name", Description = "", Mandatory = false, SortOrder = 1
                }, "Membership");
                updated = true;
            }
            if (!memberType.PropertyTypeExists("age"))
            {
                memberType.AddPropertyType(new PropertyType(numericDefinition)
                {
                    Alias = "age", DataTypeDefinitionId = numericId, Name = "Age", Description = "", Mandatory = false, SortOrder = 1
                }, "Membership");
                updated = true;
            }

            if (updated)
            {
                context.Services.MemberTypeService.Save(memberType);
            }
        }