2015-04-02 74 views
1

我想修改實體框架6(模型優先)用於生成類型以便在所有實體類定義上注入GeneratedCodeAttribute的T4模板。我希望在任何項目中添加新的ADO.NET實體數據模型時,在任何解決方案中都會持久保存此功能 - 所以我需要在除了使用實體圖生成的T4模板之外進行更改。修改實體框架類型T4模板

EF6專家能否告訴我如何去做這件事?

這是我嘗試過什麼(沒有成功):我叫位於CSharpDbContext.Types.tt T4模板,這似乎是相同的是它和我的.edmx產生的T4模板的內容文件。我假設這個文件是在Visual Studio添加新項目列表中顯示的EF 6.x DbContext生成器。 CSharpDbContext.Types.tt我的計算機上的文件的位置是:

C:\ Program Files文件(x86)的\微軟的Visual Studio 12.0 \ Common7 \ IDE \的ItemTemplate \ CSHARP \ DATA \ 1033 \ DbCtxCSEF6

當我修改這個文件,但是,我得到完全相同的類定義,就像修改之前一樣。如果我將它移動到完全不同的位置,我會再次獲得相同的結果。從我可以告訴的是,這個文件和我的edmx特定的T4模板之間沒有任何聯繫。

欣賞是否有人可以對此有所瞭解。

回答

3

第1步:不要這樣做。請勿修改使用EF下載的模板,因爲您無法在「乾淨​​」的機器上輕鬆而一致地複製該模板。

第2步:一旦您添加EF DB-first,您可以在項目中編輯該模板的副本。這個模板將被存儲在代碼庫中,您將能夠在沒有「神奇」設置的情況下獲得可重複的結果。缺點是每次創建新的EF上下文時都需要修改模板。

要修改打開MyEFItem.tt的模板,請研究它的工作方式並根據需要對其進行編輯。在你的情況下,我會在該.tt中搜索「partial class」,並在該行之前插入[GeneratedCode]。一旦保存,您將看到生成的.cs中的更改,或者您可以右鍵單擊.tt和「運行自定義工具」

+0

注意,謝謝。也許我會請求EF團隊修改他們的T4模板來自動完成這個工作 - 它可以幫助像NDepend這樣的工具,其中有一個屬性有助於過濾掉生成的代碼。 – 2015-04-07 17:11:58