作为我们应用程序架构的一部分,我们希望在功能层之间定义清晰的线条。因此,典型的应用程序解决方案将包含:
这些最终成为完全不同的组件。
实体/模型描述是为了将数据库访问功能保持在与POCO不同的层中,因此只有Task需要了解Model,而Presenter的所有人都知道实体
这在使用Code-First或Fluent-API时效果很好 - 但由于在这些范例中缺乏对SPROC的支持,事实证明在EF 4.1下我必须使用EDMX模型。
所以 - 我正在使用DbContext生成器生成POCO,但结果类最终在.Model下,虽然我可以将其命名空间强制转换为.Entity,但它们仍然存在于.Model程序集中,这意味着现在。 Presenter必须引用.Model来获取应该在.Entity中的类。
有没有办法强制或欺骗EF将其生成的输出转储到另一个项目中?
答案 0 :(得分:16)
不确定。 DbContext Generator只是两个T4模板。您可以将模板生成实体移动到其他项目。您只需要修改模板以指向正确的EDMX文件。这是默认值:
string inputFile = @"Model.edmx";
您必须将其更改为EDMX文件的相对地址。它将类似于:
string inputFile = @"../Model/Model.edmx"
模板将自动使用当前项目的默认命名空间用于生成的实体,但您必须修改上下文的第二个模板以使用新命名空间,以便从引用的程序集中正确解析实体类型。
在另一个项目中使用模板有一个小缺点 - 修改模型时它不会自动更新。您必须始终使用模板文件上下文菜单中的运行自定义工具手动触发实体重新创建。