2012-03-03 55 views
1

有沒有人有從T4模板引用Code First DbContext的示例?從T4模板引用代碼第一個DbContext?

我已經發現,使用的.dbml作爲源一些T4例子和也那些引用的數據庫。我想循環併爲上下文中的所有類構建JavaScript文件。我很難弄清楚如何引用EnvDTE變量來獲取DbContext。從那裏我將轉換爲ObjectContext並循環遍歷類生成代碼。

任何意見或例子嗎?

回答

1

信息明智你可以編譯包含組件下降到.dll和然後在T4過程加載DLL代碼首先,並通過反射從它讀出的數據。

我們做了這樣的方法在一個過程中,我們不得不手段獲取數據庫=>系列化類,但不能干擾T4這個階段;只有在代碼生成完成到序列化類之後。在這種情況下,編譯它比較容易,然後通過反射來讀取它。

如果用這種方法,你必須處理,你需要先構建應用程序的一部分,然後用T4代針對以獲得剩餘完成的事實去。如果你正在創建Javascript文件,它可能會更容易。

您可以基於T4的反射爲「預處理」,以便您可以在後生成腳本中運行它。

編輯:添加討論會上案例展示。

http://abstractiondev.wordpress.com/2012/03/09/microsoft-techdays-2012-finland-adm-materials/

下載從GitHub示範,並期待在 「T4 Demos.sln」 - 解決方案,Advanced7.tt示範。它解析給定程序集名稱中的類型和屬性。

+0

感謝您的信息。你有沒有一個例子(或者指向我)來直接引用這個dll。 – WillC 2012-03-04 23:42:59

+0

如果您可以承擔使用CTP的奢侈品,那麼我也會看看roslyn。 (http://www.microsoft.com/download/en/details.aspx?id=27746)。就我個人而言,我會使用CodeFirst上的.dbml並遍歷.dbml來生成任何需要生成的內容。 – FuleSnabel 2012-03-05 11:36:56

+0

@WillC我只是準備演示研討會,討論一種方法來完成另一種引用dll的方法。一旦演示完全可下載,我會進行相應的更新。基本上你的T4可以使用Assembly.LoadFrom方法,然後使用那裏的反射:http://msdn.microsoft.com/en-us/library/1009fa28.aspx – Kallex 2012-03-06 18:56:28