【问题标题】:Model DataAnnotation for asp.net mvcasp.net mvc 的模型 DataAnnotation
【发布时间】:2011-11-15 07:51:38
【问题描述】:

有什么方法可以直接从我的数据库中获取我的模型的数据注释? 我有一个包含大量数据和表的数据库,所以我使用数据库中的实体框架生成我的模型,所以我获取类,但我想知道实体框架或其他一些 orm 是否可以直接从数据库中获取属性和约束并将它们放入在类中作为数据注释,如 [required] 或 [datatype(datatype.emailadress)]

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

    • 我在解决方案的单独项目中生成模型类,因此在 mvc 解决方案的模型文件夹中,我添加新类并从生成的类复制代码,并添加手动数据注释。那么你能更具体地说明我应该在哪里继承 modelmetadataProvider 类吗?
    • 您能否在第 2 步中提供更多信息)从数据库中读取和 3)我从来没有做过这样的事情,所以我有点困惑,我应该创建我的 ModelMetaDataProvide 类吗?
    • 您应该创建自己的类,并且您可以从 ADO.NET 或在 CreateMetadata 方法中使用 ORM 读取所有肉类数据字符串。
    猜你喜欢
    • 2022-07-21
    • 2023-03-09
    • 2011-10-02
    • 2012-04-20
    • 2023-04-07
    • 2015-05-02
    • 2013-01-15
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多