2010-03-18 100 views
2

我開始使用模型優先開發的實體框架4。我正在構建一個簡單的WPF演示應用程序來學習框架。我的應用程序有兩個實體,主題和註釋。一個話題是一個討論話題;它具有標題,文本和DateRevised屬性。主題還有一個Notes集合屬性。 Note具有DateCreated和Text屬性。使用T4模板爲EF4生成的實體添加自定義代碼?

我已經使用EF4爲應用程序創建EDM和數據存儲。現在我需要爲實體添加一點智能。例如,Topic.Text屬性的屬性設置器需要更新Topic.DateRevised屬性,並且Note需要在實例化時設置它的DateCreated屬性 - 這非常簡單。我假設我不能直接修改生成的類,因爲如果實體重新生成,我的代碼將會丟失。

這是我可以通過修改EF4用來生成實體的T4模板來實現的事情嗎?換句話說,可以修改T4模板以將我的代碼添加到它生成的實體中以執行這些任務嗎?你能否介紹一下如何開始的好教程或解釋?

到目前爲止,我發現的大部分內容都是關於如何將tt文件添加到EDM,所以我可以做到這一點。我正在尋找的是一種資源,我可以使用它來達到下一個級別,假設可以使用T4模板來自定義生成的實體,如前所述。謝謝你的幫助。

回答

2

您可以在不使用T4的情況下使用部分類和部分方法執行此操作。

每個EF屬性將有一個部分OnPropertyNameChanged方法。如果您在部分課程中實施該課程,則可以添加所需的行爲,並且在更新時不會丟失更改。

所以你會添加一個新文件,比如說Topic.cs。在那裏,你會寫:

namespace MyNamespace 
{ 
    public partial class Topic 
    { 
     partial void OnTextChanged() 
     { 
      this.DateRevised = DateTime.Now; 
     } 
    } 
} 
+0

沒有開玩笑!誰會認爲這很簡單?我喜歡EF4,我更喜歡它。任何建議如何實現Note.DateCreated代碼?這通常會在構造函數中進行,因爲它僅在創建Note時設置,而不是在其文本更改時設置。 – 2010-03-18 16:22:05

+0

是的,構造函數很好。你可以添加一個無參數的構造函數到部分類,它會工作。但是,您可能還想考慮您的業務規則層,具體取決於您在做什麼。 – 2010-03-18 16:35:12

+1

爲了研究這個問題的其他人的利益 - 我沒有意識到一個部分類可以有它自己的構造函數。如果有兩個部分類,則兩個構造函數都會運行。 – 2010-03-18 19:26:05