zoukankan      html  css  js  c++  java
  • asp.net mvc5 DataBase First下model校验问题(MetadataType使用)

    最近学习asp.net mvc5,使用   asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是code first,model first和database first)

    新建了一个专门的mode项目用于存放EF生成的model信息,那么问题来了,在新建的asp.net mvc5项目中同样有用于数据注解和验证的model,这两个model很大一部分会有重合,这就让人不想再去

    在数据交互中手动的对应转换填充 数据库model和页面数据注解验证model了,这时我们可以把asp.net mvc项目下的model对象转移到存放到EF生成model信息的项目下。

           

    图1

    如图1,Blog.edmx 本质是一个xml文件, 用来存放解析存储模型、概念模型以及这两者之间的映射,其中BLog.tt是一个T4模板文件用于生成其下对应的数据模型对象

    当然如果我们直接修改这些model对象的数据验证属性也是可以的, 但是当数据库发生变化时更新模型时这些model对象上的数据校验属性就会被覆盖

    那么这个时候我们可以新建一个model对象通过MetadataType属性来指定要与数据模型类关联的元数据类,如图1所示在Blog.edmx之上有一个Model文件夹用户存放关联的元数据类。

    MetadataType的使用代码如下:

     1 using System;
     2 using System.ComponentModel.DataAnnotations;
     3 namespace Blog.Model
     4 {
     5     [MetadataType(typeof(UsersMetaData))]
     6     public partial class Users
     7     {
     8         /// <summary>
     9         /// 新增的一个校验两次密码的属性
    10         /// </summary>
    11         [DataType(DataType.Password)]
    12         [Display(Name = "确认密码")]
    13         [Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
    14         public string ConfirmPassword { get; set; }
    15     }
    16     public class UsersMetaData
    17     {
    18 
    19         [Display(Name = "用户名")]
    20         [Required(ErrorMessage = ("请输入{0}!"))]
    21         public string UserName { get; set; }
    22 
    23         [Display(Name = "用户姓名")]
    24         [Required(ErrorMessage = ("请输入{0}!"))]
    25         public string UserRealName { get; set; }
    26 
    27         [Display(Name = "密码")]
    28         [Required(ErrorMessage = ("请输入{0}"))]
    29         [DataType(DataType.Password)]
    30         [StringLength(50, ErrorMessage = "{0}的长度在{2}和{1}之间", MinimumLength = 6)]
    31         public string Password { get; set; }
    32 
    33        
    34     }
    35 }

    数据注解和验证属性需要引用System.ComponentModel.DataAnnotations命名空间,如此处理后不论是自定义验证属性还是新增属性都是ok,在mvc项目中引用当前项目的引用,就能完成达到我们的目的

    这个仅仅属于一个小技巧,如果是model first或者code first就完全不需要如此了

  • 相关阅读:
    php面试专题---2、常量及数据类型考点
    php面试专题---3、运算符考察点
    php面试专题---1、php中变量存储及引用的原理
    html中map标签和area标签的应用(总结)
    nginx中如何设置gzip(总结)
    PHP缓存技术OB系统函数(总结)
    Http协议面试题(总结)
    剑指offer 例题
    程序的模块化的一些见解6-读牛人代码之感
    oracle dblink造成远程数据库session过多
  • 原文地址:https://www.cnblogs.com/zmxmiss/p/11744166.html
Copyright © 2011-2022 走看看