我的项目是ASP.Net MVC网站,已部署到多个客户,每个客户都有自己的SQL Server数据库。正如您所期望的那样,每个数据库中的数据都是不同的,因此即使在开发过程中,我们也为每个客户提供了单独的数据库。数据库模式是相同的。我们有一个自定义数据库上下文,扩展了DbContext并由Unity管理。
目前我们通过重命名数据库本身或在Web.config中编辑连接字符串来切换这些数据库(技术上在ConnectionStrings.private.config中,我们使用configSource属性将其引入Web.config)。
如何在不切换数据库时编辑任何配置的情况下,一次针对多个客户数据库开发相同的代码库?例如,我可能在http://customerone.localhost/有一个客户而在http://customertwo.localhost/有另一个客户{3}}(不同的端口号也可以)。每个人都访问他们自己的数据库,但共享c#代码。
在apache中,我可以使用<If>
或SetEnvIf
根据网址设置配置,但似乎并不是IIS中的等效配置。当我尝试用c#代码更改它时,我被告知它是只读的。
要明确我不希望将任何更改写回web.config - 我只希望在请求的生命周期中使用自定义数据库连接字符串。