2

我正在开发一个 MVC4 项目,该项目需要使用许多不同的数据库,每个数据库都有一些用于搜索的存储过程。该站点是一个资产搜索工具,需要查询各种现有系统。如果我允许 EF 自行生成模型,我最终会为我在每个数据库中使用的每个过程生成一个模型。

我更喜欢的是已经定义了我自己的 POCO 模型,并且 EF 将其结果映射到该模型。因此,无论从哪个数据库获取数据,它都会映射回同一个模型。每个数据库中的列名略有不同,因此确实需要将列映射到模型属性。

没有写回数据库,它纯粹是选择数据。

在“编辑函数导入”表单上,我可以根据结果创建模型。还有一个选项可以查看“功能导入映射”,但它似乎没有做我想要的。

有没有其他人试过这个?

添加了一张图片来帮助解释问题

描述数据访问

到目前为止,我所管理的最接近这一点的是让 EDMX1 查询 2 个数据库。这仅适用于它们位于同一数据库服务器上。我必须完全限定存储过程中的 Db 名称。然后我可以使用 1 个 EF 模型作为 2 个查询的返回类型。该模型仍然无法在另一个 EDMX 中使用,因此如果我需要连接到不同的 Db 服务器,我仍然无法共享该模型。所以问题没有解决。

这是当前进展的图像。

迄今为止的进展

4

1 回答 1

1

函数导入映射用于将存储过程/函数调用映射到 EF 代码。它在这里并不真正相关,除非您使用存储过程(这不是 EF 90% 的时间的方法 - 仅将存储过程用于更复杂的过程)。

就其本质而言,EF 上下文只能有一个与之关联的数据库。您需要创建多个上下文才能一次访问多个数据库。

在您的情况下,我会为每个数据库创建一个数据库优先模式 (.edmx) 文件,然后在其上方编写一个服务层抽象,允许您将数据展平为预期的模型。这是我一直在做的事情,不管我同时处理多少个数据库。你几乎已经在你的第一个图表中概述了这一点。服务层可能有多个类(例如,对于博客网站,您可能有 BlogService、UserService、CommentService 等),每个类都包含您从应用程序层调用的方法。

我整理了一张可能有助于解释的快速图表

http://www.gliffy.com/go/publish/image/4818386/L.png

服务层执行所有 EF 工作,而您的应用程序层(或业务层,无论您想如何称呼它)将执行您的所有业务逻辑。

这种设置非常适合 TDD 和依赖注入/IoC。一切都很整洁,很好地分开。

于 2013-08-20T10:50:40.083 回答