如何避免在EF自动生成的model中的DataAnnotation被覆盖掉

网上很多有介绍这个方法的,对于生成的model中的单个类.cs来说,我们自建的类要怎么建呢?

1

ProOrder.cs   这个类来说:

这个是Models文件夹下ModelValde文件夹下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 
 7 namespace JBLPro.Mvc.Models
 8 {
 9     [MetadataType(typeof(ProOrderMetaData))]
10     public partial class ProOrder
11     {
12     }
13     public partial class ProOrderMetaData
14     {
15         [Key]
16         [Display(Name = "主键ID")]
17         public int ProOrder_PID { get; set; }
18         [Display(Name = "创建时间")]
19         [Required(ErrorMessage = "必填项")]
20         [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
21         public System.DateTime CreateDate { get; set; }
22         [Display(Name = "是否转入证2323123123明生效")]
23         public Nullable<int> TurnBuy { get; set; }
24         [Display(Name = "转入产品ID")]
25         public Nullable<int> FromProID { get; set; }
26         [Display(Name = "购买产品名称")]
27         public int Proid { get; set; }
28 
29         [Display(Name = "开始时间")]
30         [Required(ErrorMessage = "必填项")]
31         [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
32         public System.DateTime DateStart { get; set; }
33         [Display(Name = "截止时间")]
34         [Required(ErrorMessage = "必填项")]
35         [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
36         public System.DateTime DateOver { get; set; }
37 
38         [Display(Name = "产品份额")]
39         [Required(ErrorMessage = "必填项")]
40         public string ProShare { get; set; }
41 
42         [Display(Name = "用户名")]
43         [Required(ErrorMessage = "必填项")]
44         public string Userid { get; set; }
45 
46         [Display(Name = "归属")]
47         public string CustomerVested { get; set; }
48 
49         [Display(Name = "固定收益率")]
50         [Required(ErrorMessage = "必填项")]
51         public string ProFixed { get; set; }
52         [Display(Name = "购买时净值")]
53         [Required(ErrorMessage = "必填项")]
54         public string ValueStart { get; set; }
55 
56     }
57 }
View Code

下面是ef生成的,Models文件夹下的JBLProData.edmx中的:

 1 //------------------------------------------------------------------------------
 2 // <auto-generated>
 3 //    此代码是根据模板生成的。
 4 //
 5 //    手动更改此文件可能会导致应用程序中发生异常行为。
 6 //    如果重新生成代码,则将覆盖对此文件的手动更改。
 7 // </auto-generated>
 8 //------------------------------------------------------------------------------
 9 
10 namespace JBLPro.Mvc.Models
11 {
12     using System;
13     using System.Collections.Generic;
14     
15     public partial class ProOrder
16     {
17         public int ProOrder_PID { get; set; }
18         public System.DateTime CreateDate { get; set; }
19         public Nullable<int> TurnBuy { get; set; }
20         public Nullable<int> FromProID { get; set; }
21         public int Proid { get; set; }
22         public System.DateTime DateStart { get; set; }
23         public System.DateTime DateOver { get; set; }
24         public string ProShare { get; set; }
25         public string Userid { get; set; }
26         public string CustomerVested { get; set; }
27         public string ProFixed { get; set; }
28         public string ValueStart { get; set; }
29         public string ValueEnd { get; set; }
30         public string CustomerProfitType { get; set; }
31         public Nullable<decimal> CustomerProfixed { get; set; }
32         public Nullable<decimal> CustomerProfloat { get; set; }
33     }
34 }
View Code

很多都是表述的不清楚,这里想说明的是我们自建的.cs要放在一个不能和JBLProData.edmx一个文件夹下,因为这样会重名,会提醒要不要覆盖掉

所以不能在Models中建同名类!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

放在其他文件夹可以同名,如果想要放在Models中,那就建一个不同名的.cs类

这个ProOrderVidate.cs类和上面Models/ModelValde/ProOrder.cs类中的内容是一样的。

这里没有讲怎样类中的东西,但是想说明这个类似继承的类只要保证命名空间一样,和下面MetadataType(指定要与数据模型类关联的元数据类)设置对了,

放在那里都是可以的(理论)

1 [MetadataType(typeof(ProOrderMetaData))]
2 public partial class ProOrder
3 {
4 }
5 public partial class ProOrderMetaData
6 {
7 ............................
8 
9 }
View Code
原文地址:https://www.cnblogs.com/myloveblogs/p/5310079.html