不同项目中的实体框架5和Visual Studio 2012 POCO类

时间:2012-09-11 17:42:02

标签: entity-framework visual-studio-2012

在VS 2010和EF 4.4中,您可以在Entity Framework中使用DBContext生成器时移动和编辑.tt文件,以便您的POCO对象位于与DBContext文件不同的项目中。

请参阅HereHere,了解我所说的内容。

在VS2012 / EF5中,这似乎是不可能的。 POCO类是作为EDMX文件下的子项生成的。无法从Visual Studio中复制文件。从资源管理器中移动文件没有帮助,因为您移动的文件会在编译时重新创建。

我错过了一些基本的东西吗?

我没有使用EF5的任何代码生成项(而我使用的是EF4.x.)这可能有区别吗?

3 个答案:

答案 0 :(得分:64)

在Visual Studio 2012中,当您添加ADO.NET实体数据模型(* .edmx)时,它包含上下文和模型类的T4模板作为EDMX文件的子项。例如,如果添加MyModel.edmx,它将有4个子项,如下所示:

  1. MyModel.Context.tt
  2. MyModel.Designer.cs(在C#项目中)
  3. MyModel.edmx.diagram
  4. MyModel.tt
  5. MyModel.tt将POCO实体生成为子项。要在单独的项目中生成实体,请执行以下步骤:

    1. 创建一个单独的类项目。
    2. 添加新项目,选择“EF 5.x DbContext Generator”模板。这将创建* .tt文件。例如MyModel.tt。
    3. 按如下方式编辑模板文件:

      const string inputFile = @"MyModel.edmx"; // old value (remove)
      const string inputFile = @"..\MyOtherProjectName\MyModel.edmx"; // new value
      
    4. 在您的其他项目中,展开EDMX文件并右键单击MyModel.tt,选择“删除”。
    5. 就是这样。你完成了。您现在在一个项目中拥有模型和上下文,在单独项目中拥有实体。

答案 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文件的路径。一旦你这样做它就有效。 (我知道我说它不在上面,但我第一次尝试时一定做错了。)