【问题标题】:Dapper changing connection string at runtimeDapper 在运行时更改连接字符串
【发布时间】:2019-04-02 04:25:28
【问题描述】:

我的应用程序连接到三个相同的数据库服务器(DDL 方式)。

我想让应用程序用户决定他们要连接到哪个数据库。

这是一个 ASP.NET Core 2.1 API 项目,它实现了服务和存储库模式(使用 Dapper 调用数据库查询,但这可以更改)。

我可以简单地将服务器名称作为我的域项目中的参数,但我不希望它知道我们拥有的数据库服务器的任何信息,我也不希望我的存储库知道可能有多个服务器。

所以只有应用程序端可以决定在运行时连接到哪个数据库服务器。

我能够找到有关 EF Core 的示例和建议,但对于其他任何东西(尤其是 Dapper)都没有。

所以我的问题是。如何让用户在运行时更改数据库服务器,同时让域和存储库不知道有多台服务器存在?

【问题讨论】:

  • 用户将如何告诉您他们想使用哪个数据库?通过传入的 API 请求?
  • @cl0ud 正确。可能作为请求对象的一部分(可能作为标头)。我们的服务器数量有限,而且它们的变化非常.非常.非常少。

标签: asp.net-core dapper asp.net-core-webapi asp.net-core-2.1


【解决方案1】:

所以在这种情况下,我建议将连接字符串存储在环境变量或 appsettings.json 文件中。假设用户想要访问 "server1" ,这将来自您的 api,然后您可以像这样在存储库层中获取相关的连接字符串

var connectionString = Environment.GetEnvironmentVariable(serverToUse);

其中serverToUse 是从 api 传入的“server1”。我更喜欢将连接字符串存储在环境变量中,因为它直接存储在主机上,而不是应用程序上。你也可以通过 appsettings 来做到这一点

"Server1" : "Your connection string here" 在您的 appsettings.json 中

您也可以在服务层中执行此操作,并让服务层将连接字符串传递给存储库。选择你的口味。在这种情况下,存储库不关心您使用的连接,只要它存在于环境变量或应用程序设置中即可。

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多