21

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

有关我正在谈论的内容的示例,请参见此处此处。

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

我在这里缺少一些基本的东西吗?

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

4

3 回答 3

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. 我的模型.tt

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,选择删除。

就是这样。你完成了。您现在将模型和上下文放在一个项目中,将实体放在单独的项目中。

于 2012-10-24T20:08:17.300 回答
6

查看以下帖子:Visual Studio 2012 - 无法移动 EF .tt 文件

它说明了如何将 .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

于 2013-01-04T19:22:55.610 回答
2

所以,你现在必须通过 Windows Explorer 移动它。然后在您移动的 .tt 文件中编辑 EDMX 文件的路径。一旦你这样做,它就会起作用。(我知道我说它不是上面的,但我第一次尝试时一定做错了什么。)

于 2012-09-11T18:04:43.640 回答