我们有一个 Silverlight 应用程序,它使用 WCF RIA 服务和实体框架 4.1 连接到数据库。
目前,作为 web.config 中的标准,提供了连接字符串,这一切都成功了。
但是,我现在希望能够在运行时根据用户登录动态更改连接字符串。
我发现了一些其他帖子暗示这样做,但他们使用 ObjectContext 而我们在 System.Data.Entity 命名空间和 DbDomainService 类中使用 DbContext。
为了弥补这一点,我在我的 DbDomainService 实现中重写了 CreateDbContext() 方法,如下所示:
protected override CoreContext CreateDbContext()
{
dbServer = null, dbName = null;
httpCookie = System.Web.HttpContext.Current.Request.Cookies["DBServer"];
if (httpCookie != null)
{
dbServer = httpCookie.Value;
}
var cookie = System.Web.HttpContext.Current.Request.Cookies["DBName"];
if (cookie != null)
{
dbName = cookie.Value;
}
if (dbServer == null && dbName == null)
{
return new CoreContext();
}
string connStr = "Data Source=" + dbServer + ";Initial Catalog=" + dbName + ";Integrated Security=true";
return new CoreContext(connStr);
}
这在第一次加载 Silverlight 应用程序时成功运行,但是,在所有后续加载中,尽管更改了替换到连接字符串中的值,但仍使用最初建立的相同连接。
改变连接的唯一方法似乎是在 IIS 中回收应用程序池并再次加载应用程序。
难道我做错了什么?还是不能让 DbDomainService 动态更改它的连接?