zoukankan      html  css  js  c++  java
  • 怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉

    相信非常多人刚接触EF+MVC的时候,会有这个疑问。就是当我们在model类中加验证信息的时候。会在又一次生成model的时候被重写掉。

    这里介绍一个方法:

    比方我有个Employee类是从数据库中生成到model中的,我们能够在Models目录中创建一个部分类名称与Employee类同名(注意:该类的命名空间必须与自己主动生成的类属于同一个命名空间),类内容为空的就能够。然后在新建的部分类下方再创建一个类(EmployeeMetaData),类中中加上我们须要验证的列与验证信息,然后须要将

    [MetadataType(typeof(EmployeeMetaData))]加在新建的Employee类名上方

    这时我们在view页面中不用更改代码。这样当我们又一次生成model的时候,我们自定义的部分类Employee就不会受影响了。

    以下是例子代码:

    从数据库中生成的Employee:

    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated from a template.
    //
    //     Manual changes to this file may cause unexpected behavior in your application.
    //     Manual changes to this file will be overwritten if the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace ValidationDemo
    {
        using System;
        using System.Collections.Generic;
        
        public partial class Employee
        {
            public Employee()
            {
                this.Employees1 = new HashSet<Employee>();
                this.Orders = new HashSet<Order>();
                this.Territories = new HashSet<Territory>();
            }
        
            public int EmployeeID { get; set; }
            public string LastName { get; set; }
            public string FirstName { get; set; }
            public string Title { get; set; }
            public string TitleOfCourtesy { get; set; }
            public Nullable<System.DateTime> BirthDate { get; set; }
            public Nullable<System.DateTime> HireDate { get; set; }
            public string Address { get; set; }
            public string City { get; set; }
            public string Region { get; set; }
            public string PostalCode { get; set; }
            public string Country { get; set; }
            public string HomePhone { get; set; }
            public string Extension { get; set; }
            public byte[] Photo { get; set; }
            public string Notes { get; set; }
            public Nullable<int> ReportsTo { get; set; }
            public string PhotoPath { get; set; }
            public Nullable<int> COL1 { get; set; }
        
            public virtual ICollection<Employee> Employees1 { get; set; }
            public virtual Employee Employee1 { get; set; }
            public virtual ICollection<Order> Orders { get; set; }
            public virtual ICollection<Territory> Territories { get; set; }
        }
    }
    

    创建一个部分类。命名为Employee:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.Web;
    
    namespace ValidationDemo
    {
        [MetadataType(typeof(EmployeeMetaData))]
        public partial class Employee
        {
        }
        public partial class EmployeeMetaData
        {
            public int EmployeeID { get; set; }
            [Required]
            public string LastName { get; set; }
            public string FirstName { get; set; }
            public string Title { get; set; }
            public string TitleOfCourtesy { get; set; }
            public Nullable<System.DateTime> BirthDate { get; set; }
            public Nullable<System.DateTime> HireDate { get; set; }
            public string Address { get; set; }
            public string City { get; set; }
            public string Region { get; set; }
            public string PostalCode { get; set; }
            public string Country { get; set; }
            public string HomePhone { get; set; }
            public string Extension { get; set; }
            public byte[] Photo { get; set; }
            public string Notes { get; set; }
            public Nullable<int> ReportsTo { get; set; }
            public string PhotoPath { get; set; }
            public Nullable<int> COL1 { get; set; }
        }
    }

    參考文档:
    http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs

    OK,大功告成。

    
    
  • 相关阅读:
    配置.net 3.0开发环境
    SQL分页语句
    SQL注入的实现原理和防范
    asp.net页面缓存技术
    内网渗透基础
    内网渗透工作组信息收集
    ORA00702: bootstrap verison ” inconsistent with version ’8.0.0.0.0′
    我的新blog
    专业Oracle数据库恢复技术支持
    高等代数第2讲——n元线性方程组解的情况
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8450223.html
Copyright © 2011-2022 走看看