【问题标题】:Referencing a Code First DbContext from a T4 template?从 T4 模板引用 Code First DbContext?
【发布时间】:2012-03-13 02:54:12
【问题描述】:

有人有从 T4 模板引用 Code First DbContext 的示例吗?

我发现了一些使用 .dbml 作为源的 T4 示例以及引用数据库的示例。我想循环并为上下文中的所有类构建 javascript 文件。我很难弄清楚如何引用 EnvDTE 变量来获取 DbContext。从那里我将转换为 ObjectContext 并循环遍历类以生成代码。

有什么想法或例子吗?

【问题讨论】:

    标签: ef-code-first t4


    【解决方案1】:

    信息方面,您可以将包含程序集的 Code First 编译为 .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 演示。它从给定的程序集名称解析类型和属性。

    【讨论】:

    • 感谢您的信息。您是否有以这种方式直接引用 dll 的示例(或指向我的示例)。
    • 如果你能负担得起使用 CTP 的奢侈,我也会看看 roslyn。 (microsoft.com/download/en/details.aspx?id=27746)。就我个人而言,我会在 CodeFirst 上使用 .dbml 并遍历 .dbml 以生成需要生成的任何内容。
    • @WillC 我只是在为研讨会准备演示,介绍一种方法来完成引用 dll 的另一种方法。一旦演示完全可下载,我将相应更新。基本上你的 T4 可以使用 Assembly.LoadFrom 方法,然后从那里使用反射:msdn.microsoft.com/en-us/library/1009fa28.aspx
    • Kallex,那太棒了。我会找那个
    • @WillC 我编辑了答案以反映演示案例。它正在逐步构建以与演示一起演示类/属性生成。之后我添加了 EF 案例以满足您的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多