Dapper在运行时更改连接字符串

时间:2018-10-29 09:10:40

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

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

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

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

我可以简单地在Domain项目中将服务器名称作为参数,但是我不希望它对我们拥有的数据库服务器一无所知,我也不希望我的存储库知道可能有多个服务器。

因此,只有应用程序方可以确定在运行时连接到哪个数据库服务器。

我能够找到EF Core的样本和建议,但对于其他任何东西,尤其是Dapper,却找不到很多。

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

1 个答案:

答案 0 :(得分:1)

因此,在这种情况下,我建议您将连接字符串存储在环境变量或appsettings.json文件中。假设用户想要访问“ server1”,这将从您的api中输入,然后您可以像这样

在存储库层中找到相关的连接字符串。

var connectionString = Environment.GetEnvironmentVariable(serverToUse);

serverToUse是从api传递的“ server1”。我更喜欢将连接字符串存储在环境变量中,因为它直接存储在主机而不是应用程序中。您也可以通过appsettings

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

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