如何设置单代码多数据库ASP.NET SaaS应用程序

时间:2012-05-25 16:32:20

标签: asp.net sql-server saas

我正在构建一个SaaS应用程序,我想保留我拥有的单一代码库。我想在不同的子域cust1.saascompany.com,cust2.saascompany.com等。 但是,我没有任何TenantID,并且由于多种原因而希望为每个客户保留单独的数据库(主要的一个是它已经以这种方式编码,并且在使用保证之前更改它是没有意义的)。数据库中包含用户登录成员资格。

我猜我需要单独的web.configs连接字符串?或者我应该创建一个单独的数据库来存储所有连接字符串和任何应用程序级别的变量/常量?最后,我希望能够自动化这种配置(再次,当使用保证时)。

是否有人可以指点我如何使用步骤进行设置的文章或帖子?我一直无法找到我想要的东西。

1 个答案:

答案 0 :(得分:2)

从技术上讲,这很简单。我们这样做多年了。虽然我们使用不同的约定(my.domain.com/cust1my.domain.com/cust2加上url重写)但这并没有改变任何内容。

所以,这就是你要做的。您创建连接字符串提供程序的抽象规范:

public interface ICustomerInformationProvider
{
    string GetConnectionString( string CustomerId );  
    ... // perhaps other information
}

然后你提供你想要的任何实现:

public class WebConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class DatabaseConfigCustomerInformationProvider : ICustomerInformationProvider { ... }
public class XmlConfigCustomerInformationProvider : ICustomerInformationProvider { ... }

并以某种方式将您的界面映射到实现上(例如,使用您选择的IoC容器)。

这使您有机会在部署期间配置提供程序,例如,开发人员可以使用一个提供程序(从文件读取连接字符串),在生产环境中使用另一个提供程序(从数据库中读取连接字符串,可以轻松配置。)

如果您有其他问题,请随时提出。