EF 4.1 DbContext生成器-将实体放入不同的项目中

本文关键字:项目 实体 DbContext EF | 更新日期: 2023-09-27 17:59:20

作为应用程序体系结构的一部分,我们喜欢在功能层之间定义清晰的界线。因此,一个典型的应用程序解决方案将包含:

  • 实体
  • 型号
  • 任务
  • 演示者
  • 前端

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

实体/模型描述是为了将数据库访问功能与我们的POCO保持在一个单独的层中,这样只有Task需要了解模型,而直到Presenter的每个人都知道实体

这在使用Code-First或Fluent-API时效果很好,但由于在这些范式中缺乏对SPROC的支持,因此在EF 4.1 I下必须使用EDMX模型。

所以-我使用DbContext生成器生成POCO,但生成的类最终在.Model下,虽然我可以强制它们的命名空间进入.Entity,但它们仍然位于.Model程序集中,这意味着现在.Presenter必须引用.Model才能到达应在.Entity.中的类

有没有办法强迫或欺骗EF将其生成的输出转储到不同的项目中?

EF 4.1 DbContext生成器-将实体放入不同的项目中

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

string inputFile = @"Model.edmx";

您必须将其更改为EDMX文件的相对地址。它将类似于:

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

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

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