ASP.NET API服务使用多个数据库

时间:2017-08-04 15:57:26

标签: c# asp.net database web-services api

我正在构建一个web .net API,基本上我有需要SQL查询的控制器和服务(大的)和一个数据库来获取信息。我有很多SQL和4个数据库。所以无论基础,服务都做同样的事情,但最好的方法是如何在这些数据库之间切换?

SQL有自己的数据库,只有它们,除了它们的名称$listReptiles = []; $listMammals = []; for ($i = 1; $i <= 10; $i++) { switch(mt_rand(1,2)) { case 1 : $listReptiles[] = new Reptile(); break; case 2 : $listMammals[] = new Mammal(); break; } } 等之外,可以看到它们应该在哪个数据库上使用。

我正在使用实体框架代码第一种方法,我正在寻找选项如何做到这一点。

  1. 由于服务总是完全相同,可能会为每个基础创建4个上下文,并将正确的上下文传递给控制器​​中的服务(可能使用IF,这对我来说听起来不太好)

  2. 或者根据数据库和上下文创建4个控制器,每个控制器都传递正确的上下文......看起来也不合逻辑。

  3. 这就是我需要你帮助的原因:)。

    所以概述: asp.net API,Controller和一个服务总是相同但是对于四个不同的数据库(接收SQL查询文件,从数据库读取查询并将信息作为Json发送到前端)。此外,查询有自己的DB(现在)。

1 个答案:

答案 0 :(得分:0)

我和hbulens有同样的问题,我不确定你是如何决定使用哪个数据库的。如果没有这些信息,我会以某种方式假设您。假设不同的上下文具有相同的DbSets,我会在您的数据库上下文中覆盖OnConfiguring并在那里创建连接字符串,类似这样

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var connectionString = $"<Your new connection string with {variables}>";
    optionsBuilder.UseSqlServer(connectionString);

    base.OnConfiguring(optionsBuilder);
}

这样你可以继续正常注入DbContext,你的消费者(控制器/服务)将获得他们需要的一个特定上下文,而不是获得所有可能的上下文。