EF DataBase First生成model的验证
如何避免在EF自动生成的model中的DataAnnotation被覆盖掉
相信很多人刚接触EF+MVC的时候,DataBase First模式生成model类中加验证信息的时候,会在重新生成model的时候被重写掉。
这里介绍一个方法:
比如我有个Book类是从数据库中生成到model中的,我们可以在Models文件夹中创建一个局部类名称与Book类同名(注意:该类的命名空间必须与自动生 
成的类属于同一个命名空间),类内容为空的就可以,然后在新建的部分类下方再创建一个类(BookMetaData),类中中加上我们需要验证的列与验证信 
息,然后需要将
[MetadataType(typeof(BookMetaData))]加在新建的Book类名上方
这时我们在view页面中不用更改代码。这样当我们重新生成model的时候,我们自己定义的部分类Book就不会受影响了。
解决方案:

说明:Model1.edmx是ef生成的,Book.cs是我额外添加的,代码在如下
Model代码:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.ComponentModel.DataAnnotations;
6
7 namespace Web.Models
8 {
9 [MetadataType(typeof(BookMetadata))]
10 public partial class Book
11 {
12 class BookMetadata
13 {
14 [Display(Name = "名称")]
15 [Required(ErrorMessage = "名称不能为空")]
16 public string name { get; set; }
17
18 [Required(ErrorMessage = "价格不能为空")]
19 [Range(5, 100, ErrorMessage = "价格5-100之间")]
20 public decimal price { get; set; }
21
22 public decimal time { get; set; }
23 }
24 }
25 }
控制器代码:
Controllers中BookController.cs的Add方法代码如下
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(Book model)
{
if (ModelState.IsValid)
{
db.Book.AddObject(model);
int res = db.SaveChanges();
ViewData["status"] = "成功:" + DateTime.Now.ToString();
}
else {
ViewData["status"] = "失败:" + DateTime.Now.ToString();
}
return View();
}
运行效果截图:

测试环境:VS2010+.Net4.0+MVC4+EF4
EF DataBase First生成model的验证的更多相关文章
- Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
		今天有个同事问到,在使用Entity Framework 的Database frist或model first时,怎么在model上添加验证的特性? 因为此时的Model是是VS 工具怎么生成的,直 ... 
- 怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉
		相信非常多人刚接触EF+MVC的时候,会有这个疑问.就是当我们在model类中加验证信息的时候.会在又一次生成model的时候被重写掉. 这里介绍一个方法: 比方我有个Employee类是从数据库中生 ... 
- EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段
		VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成Model时,没有处理计算字段.在保存实体时会出现错误. 可以通过修改Mapping.tt ... 
- EF里如何定制实体的验证规则和实现IObjectWithState接口进行验证以及多个实体的同时验证
		之前的Code First系列文章已经演示了如何使用Fluent API和Data Annotation的方式配置实体的属性,比如配置Destination类的Name属性长度不大于50等.本文介绍E ... 
- 用EF DataBase First做一个简单的MVC3报名页面
		使用EF DataBase First做一个简单的MVC3报名网站 ORM(Object Relational Mapping)是面向对象语言中的一种数据访问技术,在ASP.NET中,可以通过ADO. ... 
- asp.net mvc5 DataBase First下model校验问题(MetadataType使用)
		最近学习asp.net mvc5,使用 asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是c ... 
- 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式
		作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ... 
- ThinkPHP 类似Yii的Gii生成Model的功能。
		ThinkPHP 类似Yii的Gii生成Model的功能.自动生成ThinkPhp 3.1 的基础模型.. #!/usr/bin/env php <?php /** * * THINKPHP 基 ... 
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
		之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ... 
随机推荐
- ubuntu下修改ip重启系统ip不变
			今天同学问我ubuntu下ip如何写死,我想起这周在公司我们队长也问过我,我就在这把我实验的方法说一下. 打开终端: sudo vim /etc/network/interfaces 然后按如下修改: ... 
- 3640: JC的小苹果 - BZOJ
			让我们继续JC和DZY的故事.“你是我的小丫小苹果,怎么爱你都不嫌多!”“点亮我生命的火,火火火火火!”话说JC历经艰辛来到了城市B,但是由于他的疏忽DZY偷走了他的小苹果!没有小苹果怎么听歌!他发现 ... 
- 1067: [SCOI2007]降雨量 - BZOJ
			Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2 ... 
- 混乱的url编码||URL编码解码问题
			转载自:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 一.问题的由来. url就是网址,只要上网就一定会用到. 一般来说,URL只能 ... 
- 【BZOJ】【1770】【Usaco2009 Nov】lights 灯
			高斯消元解XOR方程组 一眼看上去是高斯消元解xor方程组……但是不会写……sad 去膜拜了Hzwer和ZYF Hzwer啥也没说,还是zyf靠谱…… 当多解的时候就需要爆搜枚举自由元的情况,找最优解 ... 
- CentOS安装视频播放器SMPlayer
			首先下载rpmforg,下载对应的版本,就是对应CentOS版本,还有32位与64位也要对应上.地址如下: http://wiki.centos.org/AdditionalResources/Rep ... 
- Create a method synchronized without using synchronized keyword
			Actually, lots of ways: No need for synchronization at all if you don't have mutable state. No need ... 
- 2013 ACM-ICPC长沙赛区全国邀请赛—Special equations
			……但是没仔细看,直接跳过了 这题直接枚举就可以过了 ;} 
- C#中的文件操作
			在.NET Framework 中进行的所有输入和输出工作都要用到流(stream) 有两种类型的流: 输出流:当向某些外部目标写入数据时,就要用到输出流(将数据写入到文件中). 输入流:用于将数据读 ... 
- YWE复习
			1.怎样使用C#的[状态栏][StatusStrip]控件 http://jingyan.baidu.com/article/851fbc37e7004e3e1f15ab3d.html 2.toolt ... 
