Asp.net Mvc3应用程序中的多个Web.config

时间:2012-06-12 07:54:51

标签: asp.net-mvc asp.net-mvc-3 entity-framework

我的项目规范是带有实体框架的ASP.net MVC3应用程序。

问题在于客户明智地创建了数据库。个人应用程序个人数据库对我来说很好。

但我想要一个应用程序,并且应该使用多个数据库。

如何实现同样的目标?

1 个答案:

答案 0 :(得分:0)

不是使用默认构造函数和web.config驱动的连接字符串创建实体连接,而是需要手动构建实体连接字符串,并在构造时使用其他构造函数将其提供给它。通常有一个接受字符串,另一个接受EntityConnection个实例。

如果唯一改变的是数据库的名称,那么你可以使用一个格式字符串 - 你可能会使用当前在web.config中的那个 - 这看起来像这样:

metadata=res://*;provider=System.Data.SqlClient;provider connection string="Data Source=[server];Initial Catalog=[db];User ID=[user];Password=[password]"

注意 - [server][db][user][password]这里是占位符。

只需将[db]替换为{0}

然后 - 假设您可以从用户派生数据库名称,您可以执行以下操作:

public string BaseConnectionString {
  get{
    //TODO: Get base connection string - can just bake in the constant string with
    //with the format placeholder.  A better thing would be to add it as an 
    //AppSetting in web.config
  }
}

//this now becomes you're primary way of getting a database connection for a user.
public MyEntities GetEntities(User user)
{
  var eConnectionString = GetConnectionString(user);

  return new MyEntities(eConnectionString);
}

public string GetConnectionString(User user)
{
   var dbName = get_db_name_for_user(user);
   return string.Format(BaseConnectionString, dbName);
}

这只是实现这一目标的一种方法。在IOC环境中,可以在简单的Resolve<>调用后隐藏所有这些内容。