0

有什么办法直接从我的数据库中获取我的模型的dataanotations? 我有一个数据库与很多的数据和表,所以我从数据库生成我的模型与实体框架,所以我得到的类,但我想知道可以实体框架或一些其他ORM直接从数据库中获得性质和约束,并把他们在类作为像数据anotation [需要]或[数据类型(datatype.emailadress)]asp.net mvc的模型数据anotation mvc

回答

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中

例子:

ModelMetadataProviders.Current = new YourModelMetadataProvider(); 
+0

我产生在我的解决方案在单独的项目我的模型类,所以在我的模型文件夹在mvc解决方案中,我从生成的类中添加新类和复制代码,并添加手动数据偏移。 那么你可以更具体地说我应该继承modelmetadataProvider类吗? – GoranB

+0

阅读我的更新。 – jgauffin

+0

你能否请在步骤2)从数据库中读取一些更多的信息和3)我从来没有做过这样的事情,所以我有点困惑,我应该创建我的ModelMetaDataProvide类? – GoranB