EF 4.1 DbContext Generattor - 将实体放在不同的项目中?

The*_*ebo 7 c# entity-framework-4.1

作为我们的应用程序架构的一部分,我们希望在功能层之间定义清晰的线条.因此,典型的应用程序解决方案将包含:

  • 实体
  • 模型
  • 任务
  • 主持人
  • 前端

这些最终成为完全不同的组件.

实体/模型描述是为了将数据库访问功能保持在与POCO不同的层中,因此只有Task需要了解Model,而Presenter的所有人都知道实体

这在使用Code-First或Fluent-API时效果很好 - 但由于在这些范例中缺乏对SPROC的支持,事实证明在EF 4.1下我必须使用EDMX模型.

所以 - 我正在使用DbContext Generator生成POCO,但结果类最终在.Model下,虽然我可以将其命名空间强制转换为.Entity,但它们仍然存在于.Model程序集中,这意味着现在.Presenter必须引用.Model来获取应该在.Entity中的类.

有没有办法强制或欺骗EF将其生成的输出转储到另一个项目?

Lad*_*nka 16

当然.DbContext Generator只是两个T4模板.您可以将模板生成实体移动到其他项目.您只需要修改模板以指向正确的EDMX文件.这是默认值:

string inputFile = @"Model.edmx";
Run Code Online (Sandbox Code Playgroud)

您必须将其更改为EDMX文件的相对地址.它将是这样的:

string inputFile = @"../Model/Model.edmx"
Run Code Online (Sandbox Code Playgroud)

模板将自动为生成的实体使用当前项目的默认命名空间,但您必须修改上下文的第二个模板以使用新命名空间,以便从引用的程序集中正确解析实体类型.

在另一个项目中使用模板有一个小缺点 - 在修改模型时它不会自动更新.您必须始终使用模板文件上下文菜单中的"运行自定义工具"手动触发实体重新创建.