0

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

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

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

谢谢!

4

1 回答 1

1

是的,您可以根据当前请求使用不同的连接字符串。在您的 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
            );
        });

在这里,我使用依赖注入来获取有关当前请求和路由数据的信息,以确定连接字符串。您可以使用任何您想要的服务和任何您想要确定连接字符串的逻辑。

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

于 2020-09-08T19:38:13.717 回答