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

Mar*_*den 5 c# mono t4 monodevelop entity-framework-6

对于我们的应用程序,我们在构建过程中不使用Visual Studio。Visual Studio不在生成服务器上。通常,我们一直将Visual Studio视为开发应用程序的“必备条件”,但是对于可重现构建的关键要求都是开放源代码/免费提供。

我现在正在考虑升级到EF6。我不想检入生成的Model代码,因此我需要一种无需Visual Studio即可从edmx文件生成模型的方法。

以前,我们使用过.NET框架附带的EdmGen,我们很高兴我们的构建服务器可以依靠它。在EF6中,推荐的生成代码的方法是使用T4模板。

但是,T4代码生成工具内置于Visual Studio中,并且没有单独提供。

该问题包含部分答案。但是,两个答案都存在问题。

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

其次,更吸引人的是,MonoDevelop中存在TextTransform的开源实现。但是,同样,我们缺少包含文件,此外,我不清楚此TextTransform工具的工作方式完全相同,并且可以处理EF6给我的模板。到目前为止,我在尝试使其工作时遇到错误。

那么:有没有人有一个使用EF6模型生成而不使用只能从Visual Studio安装获得的工具的有效示例?

Mar*_*den 1

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

为了让它与 Visual Studio 创建的模板一起使用,我必须进行一些更改。

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

其次,我必须对包含文件进行一些小的修改。完整修改后的文件在这里

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

./TextTransform.exe -out Models.cs -I INCLUDES Model.tt
Run Code Online (Sandbox Code Playgroud)

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