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

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

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

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

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

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

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

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

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

string inputFile = @"Model.edmx"; 

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

 string inputFile = @"../Model/Model.edmx" 

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

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