MVC 3 - Entity Framework - Строительные леса - Проблема проверки - PullRequest
2 голосов
/ 27 июля 2011

Я занимаюсь разработкой приложения MVC 3 с Entity Framework и пытаюсь использовать Scaffolding.

Для решения проблемы «Type not mappedd» я выполнил процедуру, найденную здесь .Теперь все работает нормально.

Проверка по умолчанию не работает, обязательное поле вызывает исключение, а не записывает что-то в ValidationSummary, поэтому я хочу добавить свои пользовательские проверки с использованием атрибутов.Проблема в том, что в решении проблемы «тип не сопоставлен» добавлено 2 файла .tt и файл .cs для каждой из моих сущностей, эти файлы воссоздаются каждый раз, когда моя модель (.edmx) изменяется и сохраняется, поэтому я не могу поставитьмои атрибуты валидатора аннотации данных в этих классах, и я не могу создать новый частичный класс с некоторыми свойствами, поскольку они уже определены.

Как я могу это сделать?Могу ли я перенести проверку на стороне клиента с помощью jquery?Или, может быть, есть обходной путь для добавления атрибутов валидатора аннотации данных к моим сущностям, я предпочитаю, чтобы этот способ был более наглядным для моих проверок.

Заранее спасибо

1 Ответ

3 голосов
/ 27 июля 2011

Я не использовал генератор DbContext, но у меня были похожие проблемы с генератором POCO. Предполагая, что решение аналогично:

Измените шаблон T4, который создает классы сущностей, чтобы добавить дополнительный атрибут к классу:

[MetadataType(typeof(CustomerMetaData))]

, где "Клиент" - это название организации.

Затем вручную создайте классы MetaData для каждой из ваших сущностей. Вы также можете использовать шаблон T4 для этого, если хотите, но не запускать его постоянно.

Классы метаданных выглядят так ...

public class CustomerMetaData
{

    [StringLength(150, ErrorMessage="Maximum length is 150 characters.")]
    [Required(ErrorMessage="CustomerName is required.")]
    public virtual string CustomerName
    {
        get;
        set;
    }
    public virtual Nullable<int> Type
    {
        get;
        set;

    }

    // ... etc ...
}

Как видите, вы присоединяете правила к классу MetaData, таким образом абстрагируя его от сгенерированного класса сущностей.

...