我的应用程序连接到三个相同的数据库服务器(明智的DDL)。
我希望让应用程序用户决定他们要连接到哪个数据库。
这是一个ASP.NET Core 2.1 API项目,它实现了服务和存储库模式(使用Dapper调用数据库查询,但是可以更改)。
我可以简单地在Domain项目中将服务器名称作为参数,但是我不希望它对我们拥有的数据库服务器一无所知,我也不希望我的存储库知道可能有多个服务器。
因此,只有应用程序方可以确定在运行时连接到哪个数据库服务器。
我能够找到EF Core的样本和建议,但对于其他任何东西,尤其是Dapper,却找不到很多。
所以我的问题是。我如何让用户在运行时更改数据库服务器,同时又不让域和存储库知道那里有多个服务器?
答案 0 :(得分:1)
因此,在这种情况下,我建议您将连接字符串存储在环境变量或appsettings.json文件中。假设用户想要访问“ server1”,这将从您的api中输入,然后您可以像这样
在存储库层中找到相关的连接字符串。 var connectionString = Environment.GetEnvironmentVariable(serverToUse);
serverToUse
是从api传递的“ server1”。我更喜欢将连接字符串存储在环境变量中,因为它直接存储在主机而不是应用程序中。您也可以通过appsettings
"Server1" : "Your connection string here"
在您的appsettings.json中
您还可以在服务层中执行此操作,并使服务层将连接字符串传递到存储库。选择你的口味。在这种情况下,只要存储库存在于环境变量或应用程序设置中,它就不会关心您正在使用什么连接。