Asp.net mvc 2 如何更改实体框架连接上的数据库

Asp.net mvc 2 如何更改实体框架连接上的数据库,asp.net-mvc-2,.net-4.0,c#-4.0,entity-framework-4,Asp.net Mvc 2,.net 4.0,C# 4.0,Entity Framework 4,我有一个ADO.NET实体数据模型,我想在多个数据库(在同一台服务器上)上使用,您将如何解决它 // This results in a exception, "Specified method is not supported". private MyEntities _db = new MyEntities(); public IQueryable<MyObject> GetMyObjects(string database) { _db.Connection.Chan

我有一个ADO.NET实体数据模型,我想在多个数据库(在同一台服务器上)上使用,您将如何解决它

// This results in a exception, "Specified method is not supported".
private MyEntities _db = new MyEntities();

public IQueryable<MyObject> GetMyObjects(string database)
{
    _db.Connection.ChangeDatabase(database);

    return _db.MyObjects
}

// This works...
private MyEntities _db;
private string entityConnectionString = ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString;

public IQueryable<MyObject> GetMyObjects(string database)
{
    _db = new MyEntities(entityConnectionString.Replace("__REPLACE_ME__", database));

    return _db.MyObjects
}
//这会导致异常,“不支持指定的方法”。
私有MyEntities_db=新MyEntities();
公共IQueryable GetMyObject(字符串数据库)
{
_db.Connection.ChangeDatabase(数据库);
返回_db.MyObjects
}
//这很有效。。。
私人Myenties;
私有字符串entityConnectionString=ConfigurationManager.ConnectionString[“MyEntities”]。ConnectionString;
公共IQueryable GetMyObject(字符串数据库)
{
_db=新的MyEntities(entityConnectionString.Replace(“\uuu Replace\u ME\uuuu”,数据库));
返回_db.MyObjects
}
我可能会修改您的“这很有效…”版本,类似这样的内容:

private MyEntities _db;
private string entityConnectionString = ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString;

public IQueryable<MyObject> GetMyObjects(string database)
{
    var ecsb = new EntityConnectionStringBuilder(entityConnectionString);
    var scsb = new SqlConnectionStringBuilder(ecsb.ProviderConnectionString)
    scsb.InitialCatalog = database;
    ecsb.ProviderConnectionString = scsb.ToString();
    _db = new MyEntities(ecsb.ToString());    
    return _db.MyObjects
}
private myenties\u db;
私有字符串entityConnectionString=ConfigurationManager.ConnectionString[“MyEntities”]。ConnectionString;
公共IQueryable GetMyObject(字符串数据库)
{
var ecsb=新的EntityConnectionStringBuilder(entityConnectionString);
var scsb=新的SqlConnectionStringBuilder(ecsb.ProviderConnectionString)
scsb.InitialCatalog=数据库;
ecsb.ProviderConnectionString=scsb.ToString();
_db=新的MyEntities(ecsb.ToString());
返回_db.MyObjects
}

谢谢,这个解决方案看起来好多了。将GetMyObjects中的第二行更改为“var scsb=new-SqlConnectionStringBuilder(ecsb.ProviderConnectionString);”。