我在數據庫第一個上下文中使用EF6。在這種情況下,我在我的MVC Web項目中使用實體類,並希望用各種驗證和顯示屬性來註釋實體的字段。但是,當我通過在edmx設計器中從數據庫執行更新來刷新實體類時,類將重新生成,並且我的屬性將丟失。將屬性添加到EF6生成的實體類
什麼是避免這種情況的最佳方法?
我在數據庫第一個上下文中使用EF6。在這種情況下,我在我的MVC Web項目中使用實體類,並希望用各種驗證和顯示屬性來註釋實體的字段。但是,當我通過在edmx設計器中從數據庫執行更新來刷新實體類時,類將重新生成,並且我的屬性將丟失。將屬性添加到EF6生成的實體類
什麼是避免這種情況的最佳方法?
在數據庫第一個實體框架項目中處理生成的實體類時,通常需要將屬性應用於該類的字段。如果您先前使用ViewModels並直接在MVC Web項目中使用實體,則情況尤其如此。
當然,如果您要直接應用驗證或顯示名稱屬性到字段,下次由於從數據庫操作升級而生成數據模型時,這些都將被覆蓋。
幸運的是,由實體框架生成的類標記爲部分。這意味着我們可以創建一個增強第一個類的第二個類。有效地將這兩個班級視爲一個班級。例如:
[MetadataType(typeof(AnimalMetaData))]
public partial class Animal
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int NumberOfLegs { get; set; } etc..
public class AnimalMetaData
{
[MaxLength(200)]
[Required]
public string Name { get; set; }
[MaxLength(1000)]
public string Description { get; set; } etc...
但是我們當然有一個問題。我們已經把該屬性關聯到實體類的元數據類,並且這將被覆蓋在來自數據庫的更新上。那麼我們如何解決這個問題呢?簡單!我們創建第三個「虛擬」類稱爲動物,坐在旁邊的元數據類,也是部分:
[MetadataType(typeof(AnimalMetaData))]
public partial class Animal {}
我們註釋這個類與我們的元數據類,所以實際上我們作爲一個三類;實體本身,用於鏈接實體和元數據定義類的虛擬類。
爲了保持整潔,您可能會比將元數據和虛擬類放在與Entity Framework生成的實體相鄰的單獨文件夾中更糟糕。
http://www.asp.net/mvc/overview/getting-started/database-first-development/enhancing-data-validation –