Example #1
0
        /// <summary>
        /// Performs the duplicate validation check.
        /// </summary>
        /// <param name="context">The <see cref="IPropertyContext"/>.</param>
        /// <param name="items">The items to duplicate check.</param>
        private void DuplicateValidation(IPropertyContext context, IEnumerable <TItemEntity> items)
        {
            if (!_duplicateCheck)
            {
                return;
            }

            if (_propertyExpression == null)
            {
                var dict = new Dictionary <UniqueKey, object?>(new UniqueKeyComparer());
                foreach (var item in items.Where(x => x != null).Cast <IUniqueKey>())
                {
                    if (dict.ContainsKey(item.UniqueKey))
                    {
                        if (item.UniqueKey.Args.Length == 1)
                        {
                            context.CreateErrorMessage(ValidatorStrings.DuplicateValueFormat, _duplicateText !, item.UniqueKey.Args[0]);
                        }
                        else
                        {
                            context.CreateErrorMessage(ValidatorStrings.DuplicateValue2Format, _duplicateText !);
                        }

                        return;
                    }

                    dict.Add(item.UniqueKey, null);
                }
            }
            else
            {
                var dict = new Dictionary <object?, object?>();
                foreach (var item in items)
                {
                    var val = _propertyExpression.GetValue(item);
                    if (dict.ContainsKey(_propertyExpression.GetValue(item)))
                    {
                        context.CreateErrorMessage(ValidatorStrings.DuplicateValueFormat, _duplicateText !, val !);
                        return;
                    }

                    dict.Add(val, null);
                }
            }
        }