我的项目规范是带有实体框架的ASP.net MVC3应用程序。
问题是,客户智慧数据库将被创建。个人应用程序个人数据库对我来说工作得很好。
但我想要一个单一的应用程序和多个数据库应该与之一起使用。
怎样才能达到同样的效果?
发布于 2012-06-12 16:18:15
与使用默认构造函数和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]都是占位符。
并简单地用{0}替换[db]。
然后-假设您可以从用户派生数据库名称,您可能会执行类似以下操作:
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<>调用后面。
https://stackoverflow.com/questions/10992552
复制相似问题