У меня есть несколько классов, сгенерированных EF (упрощенно):
public class Country
{
[UniqueCountry(ErrorMessage = "Record previously added")]
public String COUNTRY { get; set; }
}
public class Region
{
[UniqueRegion(ErrorMessage = "Record previously added")]
public String REGION { get; set; }
}
public class City
{
[UniqueCity(ErrorMessage = "Record previously added")]
public String CITY { get; set; }
}
Затем у меня есть 3 отдельных представления для создания или редактирования этих объектов.Я хочу убедиться, что значения, введенные пользователем, уникальны, а если нет - выдают пользователю сообщение об ошибке.Таким образом, я хочу использовать атрибуты DataAnnotation
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class UniqueCountryAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var model = value as string;
using (var db = new myEntities())
{
return !db.Country.Any(p => p.COUNTRY.ToLower() == model.ToLower());
}
}
}
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class UniqueRegionAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var model = value as string;
using (var db = new myEntities())
{
return !db.Region.Any(p => p.REGION.ToLower() == model.ToLower());
}
}
}
Есть ли способ избежать создания уникального атрибута для каждого класса и избежать создания монстра-переключателя?
Единственная разница между ними заключается вИмя таблицы и имя столбца контекста.