我正在构建一个案例管理应用程序,其中一个要求是每个客户端都使用自己的URL获取自己的数据库.但是,升级时维护应用程序的多个实例已成为一场噩梦.我正在使用IIS 7 ASP.NET MVC.我想有一个应用程序,让应用程序知道根据用户身份验证从哪个数据库获取数据.有可行的替代方案吗?
解决方法
是的,如果可能的话,最好有一个应用程序实例,否则会变得复杂.如果不同客户端的功能不同,则使用功能标志为每个客户端/用户打开/关闭功能.请参阅Martin Fowler的以下文章.功能标志可以是每个用户或客户端. Facebook和其他几个主要网站都有效地使用功能标记.
http://martinfowler.com/bliki/FeatureToggle.html
关于数据库,我认为您可以拥有一个Common数据库,其中包含所有基本信息,包括所有客户端,然后具有特定于每个客户端的其他数据库,其中包含客户端的所有其他数据.
当任何用户在Global.asax的Session_Start方法中命中客户端特定URL时,添加逻辑以获取相应的连接字符串并将其存储在会话中(Session [“ClientDbConnectionString”]),以便您可以在需要来自客户端数据库的数据时使用它.
我建议您将所有连接字符串存储在Common数据库的表中(使用标识每个客户端的键),以便在您想要加载新客户端时添加新的连接字符串行.每当您执行新版本时,我建议一起更新所有客户端数据库,而不是仅更新一个客户端数据库,否则一段时间后它将变得无法管理.