Entity Framework автоматически проверяет любые валидации вы добавляете к вашей модели по ValidationAttribute
с. RequiredAttribute
или RangeAttribute
- два примера встроенных подклассов этого атрибута.
Если вам нужна какая-то специальная проверка, наиболее удобным способом является контрейлерный переход на этот механизм и создание собственного подкласса ValidationAttribute
.
Если вы хотите проверить не-непрерывный диапазон значений, которые вы не можете использовать RangeAttribute
, но вы можете сделать свой собственный атрибут, например, так:
public class AllowedValuesAttribute : ValidationAttribute
{
private readonly ICollection<object> _validValues;
private readonly Type _type;
public AllowedValuesAttribute(Type type, object[] validValues)
{
_type = type;
_validValues = validValues.Where(v => v != null && v.GetType() == type).ToList();
}
public override bool IsValid(object value)
{
return value.GetType() == _type && _validValues.Contains(value);
}
public override string FormatErrorMessage(string name)
{
return string.Format("Value for '{0}' is not an allowed value", name);
}
}
Использование:
[AllowedValues(typeof(int), new object[] { 1, 2, 4, 8, 16 })]
public int Base { get; set; }
Обратите внимание, что здесь мы должны использовать фиксированные значения, поскольку содержимое атрибута должно быть известно во время компиляции. Кроме того, мы должны использовать object
, потому что (в настоящее время) C# не поддерживает общие атрибуты. Кроме того, существует множество вариантов. Например, атрибут может также иметь метод, который находит допустимые значения во время выполнения, возможно, из именованного источника, поэтому вы можете указать это имя в своем конструкторе.
Я не вижу никаких проблем в классах сущностей сущностей с атрибутами проверки. Модель сущности не модель домена, это часть уровня доступа к данным. Основной целью является (и должно быть) облегчение доступа к данным приложения. Если модель сущности также используется для поддержки бизнес-логики, это просто бонус.
Что такое все теги Entity Framework? –
Извините, удалили дубликаты –