Единственный уникальный атрибут для группы классов EF - PullRequest
1 голос
/ 28 февраля 2012

У меня есть несколько классов, сгенерированных 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());
        }
    }
}

Есть ли способ избежать создания уникального атрибута для каждого класса и избежать создания монстра-переключателя?

Единственная разница между ними заключается вИмя таблицы и имя столбца контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...