protected bool Equals(DataTypePreValueDto other)
 {
     return(Id == other.Id);
 }
示例#2
0
        /// <summary>
        /// Creates a PreValue for a <see cref="IDataTypeDefinition"/>
        /// </summary>
        /// <param name="dataTypeDefinitionId"></param>
        /// <param name="value"></param>
        /// <param name="sortOrder"></param>
        /// <param name="alias"></param>
        public static void CreatePrevalueForDataTypeDefinition(int dataTypeDefinitionId, string value, int sortOrder, string alias)
        {
            var poco = new DataTypePreValueDto
                           {
                               Alias = alias, 
                               DataTypeNodeId = dataTypeDefinitionId, 
                               SortOrder = sortOrder, 
                               Value = value
                           };

            ApplicationContext.Current.DatabaseContext.Database.Insert(poco);
        }
        /// <summary>
        /// Saves a list of PreValues for a given DataTypeDefinition
        /// </summary>
        /// <param name="id">Id of the DataTypeDefinition to save PreValues for</param>
        /// <param name="values">List of string values to save</param>
        public void SavePreValues(int id, IEnumerable<string> values)
        {
            using (new WriteLock(Locker))
            {
                using (var uow = _uowProvider.GetUnitOfWork())
                {
                    var sortOrderObj =
                        uow.Database.ExecuteScalar<object>(
                            "SELECT max(sortorder) FROM cmsDataTypePreValues WHERE datatypeNodeId = @DataTypeId", new { DataTypeId = id });
                    int sortOrder;
                    if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false)
                    {
                        sortOrder = 1;
                    }

                    using (var transaction = uow.Database.GetTransaction())
                    {
                        foreach (var value in values)
                        {
                            var dto = new DataTypePreValueDto { DataTypeNodeId = id, Value = value, SortOrder = sortOrder };
                            uow.Database.Insert(dto);
                            sortOrder++;
                        }

                        transaction.Complete();
                    }
                }
            }
        }
        private void AddOrUpdatePreValues(int id, IDictionary<string, PreValue> preValueCollection, IDatabaseUnitOfWork uow)
        {
            //first just get all pre-values for this data type so we can compare them to see if we need to insert or update or replace
            var sql = new Sql().Select("*")
                               .From<DataTypePreValueDto>()
                               .Where<DataTypePreValueDto>(dto => dto.DataTypeNodeId == id)
                               .OrderBy<DataTypePreValueDto>(dto => dto.SortOrder);
            var currentVals = uow.Database.Fetch<DataTypePreValueDto>(sql).ToArray();

            //already existing, need to be updated
            var valueIds = preValueCollection.Where(x => x.Value.Id > 0).Select(x => x.Value.Id).ToArray();
            var existingByIds = currentVals.Where(x => valueIds.Contains(x.Id)).ToArray();

            //These ones need to be removed from the db, they no longer exist in the new values
            var deleteById = currentVals.Where(x => valueIds.Contains(x.Id) == false);

            foreach (var d in deleteById)
            {
                uow.Database.Execute(
                    "DELETE FROM cmsDataTypePreValues WHERE datatypeNodeId = @DataTypeId AND id=@Id",
                    new { DataTypeId = id, Id = d.Id });
            }

            var sortOrder = 1;

            foreach (var pre in preValueCollection)
            {
                var existing = existingByIds.FirstOrDefault(valueDto => valueDto.Id == pre.Value.Id);
                if (existing != null)
                {
                    existing.Value = pre.Value.Value;
                    existing.SortOrder = sortOrder;
                    uow.Database.Update(existing);
                }
                else
                {
                    var dto = new DataTypePreValueDto
                    {
                        DataTypeNodeId = id,
                        Value = pre.Value.Value,
                        SortOrder = sortOrder,
                        Alias = pre.Key
                    };
                    uow.Database.Insert(dto);
                }

                sortOrder++;
            }
        }