public async Task <int> AddDataModelProperty(int dataModelId, string name, string label, string dataType, string controlType, bool isRequired, int?relatedDataModelId, string relationalType, bool?isManaged, CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();

            var dataModel = await _dataModelRepository.GetById(dataModelId, cancellationToken);

            if (dataModel == null)
            {
                throw new ProjectDataModelNotFoundException(dataModelId);
            }

            var projectDataModelPropertyByProjectSpec = new ProjectDataModelPropertyFilterSpecification(name, dataModelId);

            if (await _dataModelPropertyRepository.CountBySpec(projectDataModelPropertyByProjectSpec, cancellationToken) > 0)
            {
                throw new DuplicateProjectDataModelPropertyException(name);
            }

            var newDataModelProperty = new ProjectDataModelProperty
            {
                ProjectDataModelId = dataModelId,
                Name        = name,
                Label       = string.IsNullOrEmpty(label) ? TextHelper.SplitTextOnCapitalLetters(name) : label,
                DataType    = dataType,
                ControlType = controlType,
                RelatedProjectDataModelId = relatedDataModelId,
                RelationalType            = relationalType,
                IsRequired = isRequired,
                IsManaged  = isManaged
            };

            return(await _dataModelPropertyRepository.Create(newDataModelProperty, cancellationToken));
        }
        public async Task UpdateDataModelProperty(ProjectDataModelProperty editedProperty, CancellationToken cancellationToken = default(CancellationToken))
        {
            cancellationToken.ThrowIfCancellationRequested();

            var propertyByNameSpec = new ProjectDataModelPropertyFilterSpecification(editedProperty.Name, editedProperty.ProjectDataModelId, editedProperty.Id);

            if (await _dataModelPropertyRepository.CountBySpec(propertyByNameSpec, cancellationToken) > 0)
            {
                throw new DuplicateProjectDataModelPropertyException(editedProperty.Name);
            }

            var property = await _dataModelPropertyRepository.GetById(editedProperty.Id, cancellationToken);

            if (property != null)
            {
                property.Name        = editedProperty.Name;
                property.DataType    = editedProperty.DataType;
                property.Label       = editedProperty.Label;
                property.IsRequired  = editedProperty.IsRequired;
                property.ControlType = editedProperty.ControlType;
                property.RelatedProjectDataModelId = editedProperty.RelatedProjectDataModelId;
                property.RelationalType            = editedProperty.RelationalType;
                property.IsManaged = editedProperty.IsManaged;
                await _dataModelPropertyRepository.Update(property, cancellationToken);
            }
        }