【问题标题】:Entity Framework 5 and Visual Studio 2012 POCO Classes in Different Project不同项目中的 Entity Framework 5 和 Visual Studio 2012 POCO 类
【发布时间】:2012-09-11 17:42:01
【问题描述】:

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

请参阅 HereHere 了解我所说的示例。

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

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

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

【问题讨论】:

    标签: entity-framework visual-studio-2012


    【解决方案1】:

    在 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

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

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

    【讨论】:

    • 非常棒,我也有同样的问题。
    • 要让它工作我必须添加绝对路径,我不能使用“..\”,有人有什么想法吗?
    • @jr3,您的项目包含模型 EDMX 是同级项目还是它的位置在不同的层次结构中?请提供两个项目的绝对路径,我相信我们可以找出相对路径。
    • @Philippe,是的,当使用相对路径表示法时,这些项目都在同一个解决方案下,我找不到文件。但是,只要我在另一个项目中插入 EDMX 的绝对路径,它就可以工作。编辑:这是我的路径:pastebin.com/P51s8PeU
    • @jr3,您的模板在项目内的文件夹中,因此您需要 2 "..\" 才能上两次。见pastebin.com/M6ZgqLNn
    【解决方案2】:

    查看以下帖子: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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多