最近学习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. Cobbler安装报错--dhcpd -t failed Exception occured: <class 'cobbler.cexceptions.CX'>

    最近想玩一下自动化安装,就研究了一下cobbler,测试环境本来是想用CentOS6.X的,但是后来一想,还是想用CentOS7.X.然后就碰到坑了. 在同步cobbler配置的时候,发现了以下错误: ...

  2. swift 第十一课 结构体定义model类

    结构体是可以作为 model 类使用的不过也要 写下的创建方法 import UIKit/***创建一个model 结构,重写init 方法,结构体的属性不能出现可选类型**/ struct Mode ...

  3. @vue/cli3中解决Elint中console.log报错的问题

    方法一:package.json中”eslintConfig”>"rules”字段添加如下代码 "no-console": "off", &qu ...

  4. 45.简单邮件传输协议 SMTP

    一丶简单邮件传输协议 简单邮件传输协议 简单邮件传输协议 SMTP smtplib 模块:(在 Python3版本中,可以通过 SMTP协议发送邮件的模块常为 smtplib, 并且这个模块属于内置模 ...

  5. 34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本

    TCP非阻塞及套接字异常处理: TCP阻塞套接字异常捕获: 套接字创建失败,8000 socket.error 客户端连接错误: ConnectionRefusedError socket.gaier ...

  6. STM32 MCU一次计算优化和提速

    1.背景 STM32 MCU对25.6Kb数据进行压缩,丢掉每个数据的低4位然后2个字节拼接为1个字节.发现处理耗时竞达1ms以上,于是开始进行优化,最后达到200us的效果,提速5倍以上. 2.优化 ...

  7. layer简单使用

    官方:https://www.layui.com/doc/modules/layer.html 源码:https://github.com/xiaostudy/web_sample 效果 目录结构 代 ...

  8. 本机sshd服务开启但是其他机器不能登陆

    问题现象: 发现本机sshd服务开启但是其他机器不能登陆 查看sshd服务 [root@localhost ~]# systemctl status sshd.service ● sshd.servi ...

  9. 轻松搞定Vue 使用SignalR与Asp.net Core通讯

    前言 针对于Web与其他应用的的通讯,在.Net中,SignalR是一个不错的选择,在前后端没有分离的时候,直接引用对应的signalr.js文件即可: 这里主要记录Vue与Asp.netcore 前 ...

  10. C - Co-prime

    Given a number N, you are asked to count the number of integers between A and B inclusive which are ...