在VS 2010和EF 4.4中,您可以在Entity Framework中使用DBContext生成器时移动和编辑.tt文件,以便您的POCO对象位于与DBContext文件不同的项目中。
在VS2012 / EF5中,这似乎是不可能的。 POCO类是作为EDMX文件下的子项生成的。无法从Visual Studio中复制文件。从资源管理器中移动文件没有帮助,因为您移动的文件会在编译时重新创建。
我错过了一些基本的东西吗?
我没有使用EF5的任何代码生成项(而我使用的是EF4.x.)这可能有区别吗?
答案 0 :(得分:64)
在Visual Studio 2012中,当您添加ADO.NET实体数据模型(* .edmx)时,它包含上下文和模型类的T4模板作为EDMX文件的子项。例如,如果添加MyModel.edmx,它将有4个子项,如下所示:
MyModel.tt将POCO实体生成为子项。要在单独的项目中生成实体,请执行以下步骤:
按如下方式编辑模板文件:
const string inputFile = @"MyModel.edmx"; // old value (remove)
const string inputFile = @"..\MyOtherProjectName\MyModel.edmx"; // new value
就是这样。你完成了。您现在在一个项目中拥有模型和上下文,在单独项目中拥有实体。
答案 1 :(得分:6)
查看以下帖子:Visual Studio 2012 - Can't move EF .tt files
它说明了如何将.tt文件的依赖项信息删除到已声明的.csproj文件中的.edmx文件。这将允许您从解决方案资源管理器中拖动.tt文件。
只需确保在.tt文件开头更新文件路径,指向.edmx,如上一个答案中所述,如下所示:
const string inputFile = @"..\EFTest\EFTestModel.edmx";
实际上有几个部分和步骤,并且缺少任何一个可以防止POCO类的分离正常工作。我创建了一篇博文,详细介绍了您可以在下面查看的整个过程:
在VS.NET 2012中分离从T4模板生成的实体框架POCO类:
http://allen-conway-dotnet.blogspot.com/2013/01/separating-entity-framework-poco.html
答案 2 :(得分:2)
所以,你现在必须通过Windows资源管理器移动它。然后在您移动的.tt文件中编辑EDMX文件的路径。一旦你这样做它就有效。 (我知道我说它不在上面,但我第一次尝试时一定做错了。)