2012-10-10 31 views
3

我使用EF電動工具反向工程現有的數據庫。這可以。在EDMX Database-1st Route下面,我會爲任何覆蓋(如Data Annotations)創建部分類,例如在這裏,LedgerPeriod是原始EntityObject:實體框架 - 反向工程師代碼優先 - 覆蓋更改

[MetadataType(typeof(LedgerPeriodMetaData))] 
public partial class LedgerPeriod 
{ 
    public class LedgerPeriodMetaData 
    { 

     [Required(ErrorMessage = "Period Start Date Required")] 
     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
     [DataType(DataType.Date)] 
     public object PeriodDateFrom { get; set; } 

     [Required(ErrorMessage = "Period End Date Required")] 
     [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
     [DataType(DataType.Date)] 
     public object PeriodDateTo { get; set; } 

    } 
} 

這是好的。現在我用代碼第一反向工程師或者是否有任何自定義設置,如果你必須多次運行電源工具,因爲說我向數據庫添加了一個新表,它不會覆蓋任何更改到先前創建的現有模型。

這最終意味着我可以對實際模型類本身進行更改,而不是創建部分類。

參考了EF電動工具可以在這裏找到:

http://blogs.msdn.com/b/adonet/archive/2012/04/09/ef-power-tools-beta-2-available.aspx

+0

作爲參考,有一個比電動工具更好的逆向發生器。它支持部分。試試看:http://visualstudiogallery.msdn.microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838 –

回答

6

代碼第一次不正式支持逆向工程的情況,這就是爲什麼它被稱爲代碼優先。電動工具很好,但正如你所說,它們會覆蓋東西。 EF Code First的設計使您可以對模型本身進行更改,而不是部分和元數據(儘管如果您願意,仍然可以使用這些)。

你可以做的是使用EF Power Tools的自定義反向工程模板功能,然後修改T4模板以向生成的類添加部分聲明,或者添加代碼以測試特定實體並修改它們想。

但是,在現實中,你不應該這樣做。將您的實體傳遞給您的視圖被認爲是糟糕的設計,這將是將這些屬性添加到模型的唯一原因。最重要的是,您迫使您的視圖與數據模型具有相同的要求,這也是一個不錯的選擇。

您應該在視圖中使用專用視圖模型,並將數據屬性放置在視圖模型上。

+0

嘿Mystere男人,謝謝你!是的,我使用ViewModels。我甚至沒有想到在那裏裝飾它們(我主要使用ViewModels將多個模型傳遞給視圖)。 我有一個「拍我的頭」的時刻。我將使用我的ViewModels .... 再次感謝。 – garfbradaz