2012-03-03 47 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