2016-03-04 112 views
0

我在數據庫第一個上下文中使用EF6。在這種情況下,我在我的MVC Web項目中使用實體類,並希望用各種驗證和顯示屬性來註釋實體的字段。但是,當我通過在edmx設計器中從數據庫執行更新來刷新實體類時,類將重新生成,並且我的屬性將丟失。將屬性添加到EF6生成的實體類

什麼是避免這種情況的最佳方法?

+1

http://www.asp.net/mvc/overview/getting-started/database-first-development/enhancing-data-validation –

回答

0

在數據庫第一個實體框架項目中處理生成的實體類時,通常需要將屬性應用於該類的字段。如果您先前使用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生成的實體相鄰的單獨文件夾中更糟糕。

相關問題