Entity framework 如何为多个数据库配置多个UnitOfWork类?

Entity framework 如何为多个数据库配置多个UnitOfWork类?,entity-framework,repository-pattern,unit-of-work,Entity Framework,Repository Pattern,Unit Of Work,我首先使用实体框架代码、存储库和工作单元模式,基本上如下所述: 我还使用StructureMap来管理我的对象实例,我有一些类似这样的代码来连接EF dbcontext和工作单元: For<DbContext>().HybridHttpOrThreadLocalScoped().Use<MyDbContext>(); For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitO

我首先使用实体框架代码、存储库和工作单元模式,基本上如下所述:

我还使用StructureMap来管理我的对象实例,我有一些类似这样的代码来连接EF dbcontext和工作单元:

    For<DbContext>().HybridHttpOrThreadLocalScoped().Use<MyDbContext>();
    For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<UnitOfWork>();
我还有一个通用存储库,它目前了解MyDbContext实例。现在我需要能够支持多个数据库,从而支持多个DBContext。我正在考虑将我的IUnitOfWork改为IUnitOfWork,其中T是要使用的DbContext。但是我的存储库还需要知道要使用哪个DbContext,那么我是否必须使它具有双重通用性,例如存储库


使用我正在使用的UnitOfWork模式支持多个数据库的最佳、最简单的方法是什么?

这取决于您的应用程序逻辑。您是否打算使用单个工作单元在多个数据库中进行更改?如果是,对于在该工作单元中访问的每个数据库,您仍应使用database factory的一个工作单元。该工作单元的提交应该使用TransactionScope以原子方式在所有数据库中进行更改,这可能更具挑战性


如果您总是只需要在单个数据库中进行更改,那么您可以使用单个通用工作单元,但还必须在数据库工厂中实现通用Get。不需要将上下文类型传递到存储库。将初始化逻辑移动到具体的存储库中,这些存储库知道它们必须使用的上下文类型,它们会向数据库工厂询问该上下文。

所有数据库是否具有相同的数据库结构、相同的表等?不,它们完全不同。我不希望需要跨多个数据库上下文执行任何操作。如果我这样做了,我就可以回到我自己的事务实现上来,等等,或者想出其他办法。但就这个问题而言,假设这从未发生过。