关于如何将model.tt
(包含 POCO 实体类)文件移动到 Vs2010 中的单独项目的问题,我已经看到了几个答案
这似乎在 EF5 中不起作用,原因似乎是该model.tt
文件是 edmx 文件的子项。
如何在 Entity Framework 5 / VS 2012 中实现相同的目标?
关于如何将model.tt
(包含 POCO 实体类)文件移动到 Vs2010 中的单独项目的问题,我已经看到了几个答案
这似乎在 EF5 中不起作用,原因似乎是该model.tt
文件是 edmx 文件的子项。
如何在 Entity Framework 5 / VS 2012 中实现相同的目标?
我知道的最佳答案是简单地从当前项目中剪切 model.tt(插入适当的名称)文件并将其添加到所需的项目中。出于这个原因,我甚至重写了 EF 使用的 .tt 文件。
我喜欢关注点分离,并将适当的 .tt 文件放在以下项目中:DataAccess (model.context.tt)、Entity (model.tt) 和 Repository (model.repository.tt)。当然,您必须摆弄 .tt 文件的内容才能将其指向 .edmx,但这很简单。要使所有 t4 转换发生,VS2012 中有一个选项,Build | 转换所有 T4,这将处理解决方案中的所有 T4 文件。
遵循这个过程:
如果 .edmx 尚不存在,请创建它。
右键单击,选择“添加代码生成项”以添加 EF DbContext 5.0 生成器(如果您尚未这样做)(我假设这是您想要修改的,但此过程适用于任何 t4)。
这将为您提供两个 .tt 文件 - 模型和 model.context。
拖放到 Windows 资源管理器,在目录中找到 model.tt 文件,将其复制到“实体”目录(您希望 t4 生成到的任何位置)。
回到 VS,将其从 .edmx 项目中删除,然后将“添加现有项”添加到新项目中。
例如,如果您的两个项目如上命名(DataAccess 包含 .edmx,Entity 包含模型信息),那么您需要在值中更改 model.tt 文件中输入文件的名称(行5) "const string inputFile = "name of .edmx" 到 "..\Directory contains .edmx\name of .edmx"。
运行 T4,它就可以工作了。
如果您的意思是未生成代码,则它是一个错误。这是我们用来跟踪它的错误http://entityframework.codeplex.com/workitem/453 - 它包含一些解决方法。另一个选项是通过右键单击 tt 文件并选择“运行自定义工具”来强制生成代码