最近学习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的使用代码如下:

 using System;
using System.ComponentModel.DataAnnotations;
namespace Blog.Model
{
[MetadataType(typeof(UsersMetaData))]
public partial class Users
{
/// <summary>
/// 新增的一个校验两次密码的属性
/// </summary>
[DataType(DataType.Password)]
[Display(Name = "确认密码")]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
public string ConfirmPassword { get; set; }
}
public class UsersMetaData
{ [Display(Name = "用户名")]
[Required(ErrorMessage = ("请输入{0}!"))]
public string UserName { get; set; } [Display(Name = "用户姓名")]
[Required(ErrorMessage = ("请输入{0}!"))]
public string UserRealName { get; set; } [Display(Name = "密码")]
[Required(ErrorMessage = ("请输入{0}"))]
[DataType(DataType.Password)]
[StringLength(, ErrorMessage = "{0}的长度在{2}和{1}之间", MinimumLength = )]
public string Password { get; set; } }
}

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

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

asp.net mvc5 DataBase First下model校验问题(MetadataType使用)的更多相关文章

  1. ASP.NET MVC5 学习笔记-3 Model

    1. Model 1.1 添加一个模型 注意,添加属性时可以输入"prop",会自动输入代码段. public class CheckoutAccount { public int ...

  2. asp.net mvc5 设置Area下的为启动页

    只需修改App_Start文件夹下RouteConfig中RegisterRoutes方法 public static void RegisterRoutes(RouteCollection rout ...

  3. 四、 添加模型Model(ASP.NET MVC5 系列)

    在这一章节中我们将添加一些classes类来管理数据库中的movies.这些classes类就是ASP.NET MVC应用程序中的"model". 我们将用.NET框架中的数据访问 ...

  4. 彻底解决asp.net mvc5.2.2:vs2013 cshtml视图文件报错(当前上下文中不存在名称“model”,ViewBag,Url)

    最近遇到一个奇葩的问题,在vs2013下cshtml视图文件报错,出现当前上下文中不存在名称“model”,ViewBag,Url等等),在视图中也没有智能提示了,用@model声明视图的model类 ...

  5. Linux(CentOS 6.5)下配置Mono和Jexus并且部署ASP.NET MVC5

    1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...

  6. 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式

    作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...

  7. Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性

    今天有个同事问到,在使用Entity Framework 的Database frist或model first时,怎么在model上添加验证的特性? 因为此时的Model是是VS 工具怎么生成的,直 ...

  8. asp.net mvc5 使用百度ueditor 本编辑器完整示例(下)配置上传播放视频

    通过 asp.net mvc5 使用百度ueditor 本编辑器完整示例(上)介绍,可以上传图片到服务器了,也可以上传小的视频文件,并且由百度编辑器自动加入html5<video>标签播放 ...

  9. ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合

    建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...

随机推荐

  1. VMware安装Centos7超详细过程

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

  2. 将ByteBuffer保存成文件

    String dest = "d:/download/" + name; Path path = Paths.get(dest).getParent().toAbsolutePat ...

  3. 操作TreeView(咏南工作室)

    {*******************************************************}{                                           ...

  4. Scrapy框架(1)

    参考博客: 10.scrapy框架简介和基础应用 Scrapy框架(1)

  5. OpenGL(6)——坐标系

    在掌握基本变换后,学习如何变换coordinate space. 对coordinate space进行变换的目的是将local space中各顶点坐标转换成normalized device coo ...

  6. Git速成学习第五课:分支管理策略

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...

  7. sql注入02

    第一关:基于错误的get单引号字符型注入 第二关:基于错误的get整形注入 第三关:基于错误的get单引号变形字符型注入 第四关:基础错误的双引号字符型注入 第五关: 第六关 第七关:导出文件get字 ...

  8. get_object_var 返回一个数组

    语法:get_object_var($object),返回一个数组.获取$object对象中的属性,组成一个数组 实例: <?php class person{ public $name=&qu ...

  9. Nginx03---重装

    1.先执行一下命令 1.1 删除nginx,–purge包括配置文件 sudo apt-get --purge remove nginx 1.2 自动移除全部不使用的软件包 sudo apt-get ...

  10. 【转载】Jave开发手册之正则表达式预编译

    今天又水一篇,java开发手册华山版 一.编程规约 (九)其它 第一条 解释:Pattern要定义为static final静态变量,以避免执行多次预编译. 错误用法: // 没有使用预编译 priv ...