Модель аннотации данных для asp.net mvc - PullRequest
0 голосов
/ 15 ноября 2011

Есть ли способ получить dataanotations для моих моделей непосредственно из моей базы данных? У меня есть база данных с большим количеством данных и таблиц, поэтому я генерирую свою модель с помощью структуры сущностей из базы данных, поэтому я получаю классы, но я хочу знать, может ли структура сущностей или некоторые другие формы получить свойства и ограничения непосредственно из базы данных и поместить их в классах в качестве аннотации данных, например [обязательный] или [тип данных (datatype.emailadress)]

1 Ответ

1 голос
/ 15 ноября 2011

Да. Вы можете унаследовать класс ModelMetadataProvider :

public class LocalizedModelMetadataProvider : DataAnnotationsModelMetadataProvider
{

    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType,
                                                    Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
        if (containerType == null || propertyName == null)
            return metadata;

        // Load all metadata from your database here.

        return metadata;
    }

}

Я создаю проект под названием Griffin.MvcContrib , который почти готов и имеет область администрирования, в которой вы можете обрабатывать всю локализацию (нулевой код) для моделей и сообщений проверки.

Используя его, вы можете просто реализовать следующий интерфейс для поддержки вашей базы данных:

// the actual code file has detailed explanations of each method.
public interface ILocalizedStringProvider
{
    string GetModelString(Type model, string propertyName);
    string GetModelString(Type model, string propertyName, string metadataName);
    string GetValidationString(Type attributeType);
    string GetEnumString(Type enumType, string name);

}

Обновление

Где не важно. И вам не нужно использовать атрибуты DataAnnotation в ваших моделях (атрибут [Display]). Я просто наследую DataAnnotationsModelMetadataProvider, чтобы иметь возможность использовать атрибуты.

  1. Создать класс где угодно.
  2. Чтение из базы данных
  3. Настройте MVC для использования его в global.asax
* 1 028 * Пример:
 ModelMetadataProviders.Current = new YourModelMetadataProvider();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...