我一直在浏览整个互联网上的几个不同的线程,要么我看不出所提议的解决方案对我有用,或者他们的特殊情况与我所处的情况不同。
目前有大约8个不同的自包含数据库,每个数据库都位于另一个自包含的网站(asp.net webforms)之后。所有数据库都非常小,并且具有非常特殊的用途。也就是说,没有一种模式和设计能够以合理的方式真正匹配。有各种GUID标识了一个用户,它将所有EVENTUALLY映射到该用户的单个guid,但它们之间的映射是不同的,有时您必须在几个数据库之间跳转以从第三个数据库获得所需。这有点乱。
我想完全重构以将它们全部放在一个数据库中以减少混淆和重复数据,但由于推迟,解决方案必须使用我们所拥有的。
我想要做的是创建一个层,在这个层中所有这些数据库都可以在一个应用程序中访问(也许可以启动一个新站点并将其放在那里)。关于这一点的一些问题:
是否有一个简单的解决方案,我可以在每个数据库上使用Entity Framework并将它们全部放在同一个应用程序中?
像WCF服务这样我可以映射每个需要为每个数据库完成的CRUD操作吗?
答案 0 :(得分:2)
实体框架中的每个DBContext都使用单个数据库,因此您的解决方案必须为每个数据库使用一个。我通常做的是在实现CRUD操作的IContext
周围创建一个DBContext
,然后构建一个Repository
来执行我的操作“业务逻辑”(如RegisterUser
)多种情境。 IContext应表示一组相关的“数据库对象”(例如产品数据库的IProductContext)。现在,您可能每个数据库只有一个上下文。在合并数据库时,只需将受影响的上下文的连接字符串更改为新数据库,即可在没有太多(如果有)代码更改的情况下重新启动并运行。
这是一个很好的介绍,我发现我正在谈论的内容,虽然我认为这称为我的“上下文”存储库“和我的”存储库“”工作单元“。 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
也就是说,您可以编写一个抽取多个EF DBContexts的WCF服务,然后您可以在继续使用相同的Web服务的同时更改后端的内容。