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

    摘自ASP.NET MVC 5 网站开发之美 6.4 Metadata与数据验证

    如果使用Database-First方式生成*.edms,那么所生成的类文件会在*.tt文件的层级之下,扩展名tt是一种称为T4(Text Template Transformation Toolkit)的技术,简而言之,T4是一种用程序代码生成程序代码的技术。当*.edms有所变动时(例如,执行“从数据库更新模式”)并单击存储时会重新生成T4文件,一旦T4文件被变动便会立即执行T4程序代码重新生成所有文件的内容。

    以下使用范例来说明T4特性,使用“添加新建项”,选择“常规”选择“文字模板”,会得到含下列代码的*.tt模板,而且会立即生成同名称的*.txt文件。

    <#@ template debug="false" hostspecific="false" language="C#" #>
    <#@ assembly name="System.Core" #>
    <#@ import namespace="System.Linq" #>
    <#@ import namespace="System.Text" #>
    <#@ import namespace="System.Collections.Generic" #>
    <#@ output extension=".txt" #>
    
    Hello T4, 現在時間 <#=  System.DateTime.Now #>

     在网站开发期间,如Table Schema等Model变动相当正常,可能会经常变动*.edmx的内容。如果将前面的DataAnnotations命名空间的验证属性类一一设置到*.tt层级下的类文件中,那么当*.tt文件一旦被变动,所有类文件将会被重新生成,之前设置的验证属性也会被清楚,这会造成开发上的困扰。

    ASP.NET MVC部分类设置步骤如下(以Northwind的Product类为例):

    namespace Ch06.Models
    {
        [MetadataType(typeof(ProductMD))]
        public partial class Product
        {
            public class ProductMD
            {
                public int ProductID { get; set; }
                [Display(Name = "產品名稱")]
                [Required(
                    ErrorMessageResourceType = typeof(ProductResource),
                    ErrorMessageResourceName = "ProductName")]
                public string ProductName { get; set; }
            }
        }
    }

    scaffoldColumn、Required是验证属性。这样就可以把验证属性及规则移到不被T4所影响的类中,其他需要设置验证属性的类重复步骤2~步骤7即可。

  • 相关阅读:
    序列化的两个模块(json和pickle)
    re模块(Python中的正则表达式)
    random模块(随机数库)
    time模块
    ==还款-代偿(csv循环自动代偿)
    JMeter-性能测试监控(解决.sh文件的启动)
    JMeter-生成性能测试结果报告
    mac 添加环境变量(jmeter添加至环境变量中)
    JMeter+Ant-自动发送测试结果报告邮件
    charles-Andriod 手机手机抓包乱码
  • 原文地址:https://www.cnblogs.com/xbzhu/p/7382234.html
Copyright © 2011-2022 走看看