zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Hibernate自动生成配置文件和实体类
    Hibernate中flush()的用法,以及延迟加载的介绍
    Hibernateibernate中的get()和load()方法
    Hibernate配置以及Hibernate初始化类
    java jstl标签
    java EL详解
    JSP内置对象的cookie和session实现简单登录界面
    JSP内置对象详解
    利用MVC模式简单设计jsp分页效果
    Can not issue data manipulation statements with executeQuery().解决方案
  • 原文地址:https://www.cnblogs.com/webapi/p/5669055.html
Copyright © 2011-2022 走看看