.net具有单个dbcontext和存储库的多个数据库

问题描述

我正在尝试实现一种具有多个数据库(相同的数据库,所有的数据库都具有相同的表等)的方法,但是我需要将它们分开,从而具有多个DB。有没有一种方法可以使单个DBContext和存储库模式可以与控制器中的所有DBContext和存储库模式(具有不同的连接字符串)进行交互。

(所有数据库都相同,只是数据库名称不同)

例如我有3个控制器/端点api/course1api/course2api/course3,每个课程都有一个数据库。我一直在查看各种文档,但是在如何使用存储库模式来完成它方面遇到了困难。

谢谢!

解决方法

是的,您可以根据当前请求使用不同的连接字符串。 在您的startup.cs中,更改代码以将DbContext配置为类似于以下示例:

 services.AddDbContext<ApplicationDbContext>((serviceProvider,options) =>
        {
            var httpContext = serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
            var routeData = httpContext.GetRouteData();
            string connectionString;
            // insert here code to determine connection string based on route data.
            options.UseSqlServer(

                connectionString
            );
        });

在这里,我正在使用“依赖关系注入”来获取有关当前请求的信息,并路由数据以确定连接字符串。您可以使用所需的任何服务以及所需的逻辑来确定connectionString。

然后,当将ApplicationDbContext注入到存储库类或控制器中时,它将对该请求使用该连接字符串。