我正在使用連接到SQL Server數據庫以生成實體類的ADO.Net實體數據模型。實體框架的自動生成的類的代碼會在每次更新模型時生成
我創建生成的類部分類與此屬性:
[MetadataType(typeof(Employee))]
把DataAnnotations
上的字段。因此,我從生成的類(.g.cs
)中移除所有字段,並將它們移動到另一個分類並將數據註釋放入此類。
問題是每當我從數據庫更新模型時(無論我是從實體數據模型中刪除現有表還是隻刷新模型,生成的類代碼都會被重新生成,而且我必須再次手動刪除字段屬性從g.cs
類,因爲它們已經存在於其他分部類(由MetadataType
屬性指定的類)。
是否有可能,當我更新模型生成的代碼沒有得到再生,如果需要的話我可以手動再生特定表/類的代碼?
[MetadataType(typeof(Employee))]
public partial class Employee
{
public string badge_no { get; set; }
public string first_name { get; set; }
public string last_name { get; set; }
[Display(Name="Name")]
public string FullName { get { return first_name + " " + last_name; } }
[Display(Name = "Badge-Name")]
public string NameAndBadge { get { return badge_no + " " + FullName; } }
}
這裏是g.cs
文件(生成的文件)
public partial class Employee
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Employee()
{
this.EmpWrkDesignations = new HashSet<EmpWrkDesignation>();
}
public int id { get; set; }
//public string badge_no { get; set; }
//public string first_name { get; set; }
//public string last_name { get; set; }
public System.DateTime row_added_date { get; set; }
public Nullable<System.DateTime> row_changed_date { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<EmpWrkDesignation> EmpWrkDesignations { get; set; }
}
切勿觸摸生成的代碼,因爲它的性質將被生成並將覆蓋您所做的任何更改。 –
該代碼由** T4模板**生成,您可以*根據自己的需要適應您的需要,如果您願意的話。所以是的,如果你想這樣做,你可以修改/修改你的EF T4模板* not *來生成基本實體類的任何屬性,因爲你在元數據類中指定了所有的東西。用於「EF T4代碼生成」的Google(或Bing) - 加載命中 –
您可以先下載此NuGet包:'EntityFramework.CodeTemplates.CSharp',然後查看安裝到'CodeTemplates'文件夾中的兩個T4模板。當您運行「先從現有數據庫生成代碼」代時使用這些代碼。其他T4模板存在其他場景 –