多数据库连接字符串:将其存储在我的应用程序中

时间:2015-03-17 10:59:47

标签: c# asp.net-mvc session multi-tenant multi-database

我有不同的数据库,具有相同的架构。我需要根据已连接的客户端连接到其中一个。 例如,如果连接ClientA,我必须连接到DatabaseA;如果ClientB已连接,我必须连接到DatabaseB; 现在我有了一个多层应用程序:表示层,服务层和存储库层。 通过一些逻辑,我获得了正确的连接字符串!

所以..我现在需要的。

我不知道在哪里存储该客户端的连接字符串!我在Session中思考。但是如果我将它存储在会话中,我必须在每次调用时将它传递给存储库层,因为Session在存储库中不可见。 我认为这是我能采取的最糟糕的解决方案。

我希望选定的连接字符串只是该客户端的全局变量中的存储库层。

建议? 谢谢

4 个答案:

答案 0 :(得分:1)

如果您想保留网站的全局数据 - 您可以在Application类中存储任何数据,您可以通过以下链接查看更多详细信息: http://www.asp.net/web-forms/overview/data-access/caching-data/caching-data-at-application-startup-cs 如果您有任何单独的应用程序部分,您可以在xml文件中保留共享数据并在每个应用程序域中创建ConfigManager,或者您可以使用数据库表。

答案 1 :(得分:1)

由于已经进行了如此多的讨论,我想根据我的经验分享我的想法。

始终建议在连接的客户端的存储库层中解析连接字符串。但是,这可以在应用程序中缓存。

您的业务层将包含驻留在应用程序中的所有业务实体,并且可以在应用程序的所有层中访问它。

如果连接字符串解析机制位于此层[当然是缓存],它将是一个优雅的设计并且易于使用。

答案 2 :(得分:0)

对您而言,最好的方法可能是拥有一个数据库,其中与用户相关的表具有Users表的外键。

您可以从this Microsoft文章中了解有关多租户架构的更多信息。以下是关于此主题的完整主题:asp.net mvc multiple connection strings

答案 3 :(得分:0)

为什么不在您的应用中创建ConnectionString存储库,并根据逻辑获得正确的CS。像查找表,静态的东西。 如果您想要修改ConnectionStrings,您可以使用app.config并在需要时随时从那里获取它们。