在没有Visual Studio的EF6中从Model.edmx生成模型代码

时间:2014-01-03 16:00:48

标签: c# mono monodevelop t4 entity-framework-6

对于我们的应用程序,我们不在构建过程中使用Visual Studio; Visual Studio不在构建服务器上。一般来说,我们将Visual Studio保持为开发应用程序的“不错”,但对可重现构建的关键要求都是开源/免费提供的。

我正在考虑升级到EF6。我不想检查生成的Model代码,所以我需要一种从edmx文件生成Model的方法,而不需要Visual Studio。

以前,我们已经使用了EdmGen,因为它随.NET框架一起提供,我们很高兴我们的构建服务器依赖于它。在EF6中,生成代码的推荐方法是使用T4模板。

但是,T4代码生成工具内置于Visual Studio中,不会单独发货。

This question包含部​​分答案。但是,这两个答案都存在问题。

首先,建议许可证允许您从Visual Studio安装中将必要的文件复制到构建服务器。但是,这是一个丑陋的解决方案,因为这意味着设置新的构建服务器不能自动化,并且取决于存在的Visual Studio安装。此外,对于EF6模型生成,我们还需要Visual Studio安装中的EF.Utility.CS.ttinclude。我收到一封来自微软开发者的电子邮件说,在他的非法律意见中,我也可以复制该文件,但是看着许可证,我不相信。

其次,更有吸引力的是,MonoDevelop中有an open-source implementation of TextTransform。但是,我们再次忽略了包含文件,另外,我不清楚这个TextTransform工具的工作方式是否完全相同,并且可以处理EF6给我的模板。到目前为止,我一直在努力让它发挥作用。

那么:有没有人在没有使用只能从Visual Studio安装中获得的工具的情况下做一个EF6模型生成的工作示例?

1 个答案:

答案 0 :(得分:0)

我现在有这个工作。我完成的解决方案是使用MonoDevelop的the open-source implementation of TextTransform。事实证明,实体框架创建的tt模板使用的模板包含的文件也可以在开放许可下使用。它们可从here获得。

为了使用Visual Studio创建的模板,我不得不进行一些更改。

在Model.tt中,我必须删除#if PREPROCESSED_TEMPLATE中的GetNamespaceName签到。

其次,我不得不对include文件做一些小修改。完整修改后的文件为here

您自己需要执行此操作的所有文件都在that repository,但请注意,我不保证我在其中包含的TextTransform的二进制文件是最新的 - 您应该构建自己的/从MonoDevelop安装中取出它们。只需添加一个Model.tt文件,然后使用:

进行调用
./TextTransform.exe -out Models.cs -I INCLUDES Model.tt

其中“INCLUDES”是修改后的EF.Utility.CS.ttinclude的文件夹。