asp.net mvc的模型数据anotation

时间:2011-11-15 07:51:39

标签: javascript asp.net-mvc-3 sql-server-2008 entity-framework validation

有没有办法直接从我的数据库获取我的模型的数据加载? 我有一个包含大量数据和表的数据库,所以我使用数据库中的实体框架生成我的模型,所以我得到了类,但我想知道实体框架或其他一些orm直接从数据库得到特性和约束并放置它们在类中作为数据anotation,如[required]或[datatype(datatype.emailadress)]

1 个答案:

答案 0 :(得分:1)

是。您可以继承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
  4. 中使用它

    示例:

     ModelMetadataProviders.Current = new YourModelMetadataProvider();