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就不会受影响了。
下面是样例代码:

 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             [StringLength(20, MinimumLength = 2, ErrorMessage = "名称不能大于{2} 且要小于{1}")]
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 }

解决方案截图:

时间: 2024-12-09 14:57:54

EF DataBase First生成model的验证的相关文章

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

今天有个同事问到,在使用Entity Framework 的Database frist或model first时,怎么在model上添加验证的特性? 因为此时的Model是是VS 工具怎么生成的,直接加attribute到modle类上是太现实也不合理.一个比较合理做法,就是用 buddy class的方式来实现. 比如有一个Model类: Movie.那我们就可以添加一个局部类文件,局部类的内容如下: using System.ComponentModel.DataAnnotations;

怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉

相信非常多人刚接触EF+MVC的时候,会有这个疑问.就是当我们在model类中加验证信息的时候.会在又一次生成model的时候被重写掉. 这里介绍一个方法: 比方我有个Employee类是从数据库中生成到model中的,我们能够在Models目录中创建一个部分类名称与Employee类同名(注意:该类的命名空间必须与自己主动生成的类属于同一个命名空间),类内容为空的就能够.然后在新建的部分类下方再创建一个类(EmployeeMetaData),类中中加上我们须要验证的列与验证信息,然后须要将 [

EF Power Tools的Reverse Engineer Code First逆向生成Model时处理计算字段

VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成Model时,没有处理计算字段.在保存实体时会出现错误. 可以通过修改Mapping.tt解决. 打开Mapping.tt,找到 foreach (var prop in efHost.EntityType.Properties) { var type = (PrimitiveType)prop.TypeUsage.EdmType; var isKey = efHost.EntityTy

用EF DataBase First做一个简单的MVC3报名页面

使用EF DataBase First做一个简单的MVC3报名网站 ORM(Object Relational Mapping)是面向对象语言中的一种数据访问技术,在ASP.NET中,可以通过ADO.NET Entity Framework技术来简化数据访问.在EF里,有Code First,Model First和DataBase First三种方法来实现. 百度百科关于ORM的介绍: http://baike.baidu.com/view/197951.htm?fr=aladdin 1.就像

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很大一部分会有重合,这就让人不想再去 在数据交互中手动的

Entity Framework之Database First生成模式

众所周知,Entity Framework自4.x版本之后,开始支持Database First.Model First.Code First三种生成模式,在上一篇博客中,我们一起了解了其中的Code First(也有叫做CodeOnly的)模式,相比较而言Code First是一种比较先进的技术,我们只需写代码即可.这一次我们回过头去看看,EF框架中个人认为最简单的模式,那就是Database First. 顾名思义,DatabaseFirst就是围绕数据库为中心的开发方式,使用这种模式我们必

解决MVC EF Code First错误:Model compatibility cannot be checked because the EdmMetadata type was not included in the model.

Model compatibility cannot be checked because the EdmMetadata type was not included in the model. Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions. 分析: 碰到此错误是由于使用了EF Code First来生成数据库,生成数据库之后又修改了模型. 两种解决方式: 1.在Glo

ThinkPHP 类似Yii的Gii生成Model的功能。

ThinkPHP 类似Yii的Gii生成Model的功能.自动生成ThinkPhp 3.1 的基础模型.. 1 #!/usr/bin/env php 2 <?php 3 /** 4 * 5 * THINKPHP 基础模型生成工具 6 * 使用方法 7 * 命令行: php 本php文件 表名字 8 * 然后复制生成好的代码 9 * 10 * 11 */ 12 13 14 $host = 'localhost'; 15 $user = 'root'; 16 $pass = 'root'; 17 1

Model的验证

ModelValidator与ModelValidatorProvider ModelValidator public abstract class ModelValidator { public virtual bool IsRequired { get { return false; } } public virtual IEnumerable<ModelClientValidationRule> GetClientValidationRules()//用于客户端验证 { return E