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

Cle*_*man 21 entity-framework visual-studio-2012

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

请参阅此处此处以了解我所谈论的内容.

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

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

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

Phi*_*ppe 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

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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在其他项目中,展开EDMX文件并右键单击MyModel.tt,选择"删除".

而已.你完成了.现在,您在一个项目中拥有模型和上下文,在单独项目中拥有实体.


atc*_*way 6

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

它说明了如何将.tt文件的依赖项信息删除到已声明的.csproj文件中的.edmx文件.这将允许您从解决方案资源管理器中拖动.tt文件.

只需确保在.tt文件的开头更新文件路径以指向.edmx,如上一个答案所述,如下所示:

const string inputFile = @"..\EFTest\EFTestModel.edmx";
Run Code Online (Sandbox Code Playgroud)

有实际的几个部分和步骤,并且缺少任何一个可以防止POCO类的分离正常工作.我创建了一篇博文,详细介绍了您可以在下面查看的整个过程:

在VS.NET 2012中分离从T4模板生成的实体框架POCO类:http :
//allen-conway-dotnet.blogspot.com/2013/01/separating-entity-framework-poco.html