实体框架在运行时多个数据库(相同的模式)?

时间:2009-08-10 20:43:16

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

首先,让我说我对EF很新。话虽如此,这是我的困境:

将有一个ASP.NET应用程序迁移到ASP.NET MVC。我想为此使用EF。有一个主数据库存储“客户信息”。除此之外,每个“客户”都有自己的数据库。这些是我们的限制。

目前,主数据库中的客户端信息使我能够为每个客户端构建连接字符串并进行单独的SQL调用。

我如何在Entity Framework中完成同样的事情?每个数据库都具有相同的架构。有没有办法以编程方式切换连接字符串?这些数据库当前位于同一服务器上,但这不是必需的,它可能是完全不同的服务器。

有什么想法吗?

Web.config中的多个连接字符串将是最后的手段。即便如此,我也不确定如何准确地加以解决。

提前谢谢。

3 个答案:

答案 0 :(得分:8)

如果您在实体对象的构造函数中使用EntityConnection,则可以非常轻松地更改数据库。

EntityConnection con = new EntityConnection(connString);
con.ChangeDatabase(dbName);
using (Entities context = new Entities(con))
{
    // Some code here
}

答案 1 :(得分:5)

构建数据上下文时,以下是如何通过修改 Context.Connection 属性在运行时以编程方式更改连接字符串:

//Get the connection string from app.config and assign it to sqlconnection string builder
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(((EntityConnection)context.Connection).StoreConnection.ConnectionString);
sb.IntegratedSecurity = false;
sb.UserID ="User1";
sb.Password = "Password1";

//set the object context connection string back from string builder. This will assign modified connection string.
((EntityConnection)context.Connection).StoreConnection.ConnectionString = sb.ConnectionString; 

取自:http://sivapinnaka.spaces.live.com/blog/cns!B027EF7E7070AD69!211.entry

答案 2 :(得分:2)

如果您的客户数量有限且连接字符串几乎没有变化,那么优雅的方法可能是使用ConfigurationManager.ConnectionStrings来检索所需的连接字符串。

string connectionString = ConfigurationManager.ConnectionStrings["Miller"].ConnectionString;
return new Entities(connectionString);

另见 http://msdn.microsoft.com/en-us/library/ms254494.aspx