如何避免在EF自动生成的model中的DataAnnotation被覆盖掉
2017-08-17 16:02
453 查看
摘自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文件。
在网站开发期间,如Table Schema等Model变动相当正常,可能会经常变动*.edmx的内容。如果将前面的DataAnnotations命名空间的验证属性类一一设置到*.tt层级下的类文件中,那么当*.tt文件一旦被变动,所有类文件将会被重新生成,之前设置的验证属性也会被清楚,这会造成开发上的困扰。
ASP.NET MVC部分类设置步骤如下(以Northwind的Product类为例):
scaffoldColumn、Required是验证属性。这样就可以把验证属性及规则移到不被T4所影响的类中,其他需要设置验证属性的类重复步骤2~步骤7即可。
如果使用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即可。
相关文章推荐
- 如何避免在EF自动生成的model中的DataAnnotation被覆盖掉
- 怎样避免在EF自己主动生成的model中的DataAnnotation被覆盖掉
- 如何从数据库生成 EF Code First model
- 【菜鸟看框架】——EF如何自动生成实体
- 如何避免JSP页面自动生成session对象?为什么要这么做?
- 如何避免MVC Model First 设计时添加的DataAnnotation被覆盖掉
- ef6.0如何修改ModelData.Content.tt添加序列化的问题
- EF 自动生成实体类中加验证的属性重新生成后属性被覆盖解决办法
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 如何给EF自动生成的类添加Meta
- 【C#】 Xml文件序列化和反序列化,自动生成DataModel的.cs文件。
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
- 【Latex】Latex小白入门(2)——如何用.bib文件自动生成论文Reference
- 如何由XSD自动生成XML和实体类
- Eclipse中如何删除eclipse自动生成的//TODO Auto-generated
- Solr4.0 如何配置使用UUID自动生成id值
- 如何让从数据库中查询出符合条件的记录,然后给每个记录自动加上序号,序号是根据符合条件的记录多少在随时变化.而且也会在以查询生成的报表中显示出来.谢谢