Silverlight WCF RIA服务动态更改连接字符串

时间:2012-09-07 09:12:53

标签: silverlight entity-framework-4.1 connection-string wcf-ria-services

我们有一个Silverlight应用程序,它使用WCF RIA服务和实体框架4.1连接到数据库。

目前,连接字符串是作为web.config中的标准提供的,这一切都能成功运行。

但是,我现在希望能够在运行时基于用户登录等动态更改连接字符串。

我发现了一些暗示这样做的其他posts,但他们使用的是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动态更改它的连接?

1 个答案:

答案 0 :(得分:0)

我正在考虑域服务类的实例化模型。您是否尝试过自定义IDomainServiceFctory?它允许您决定何时创建它们的新实例,并且实现起来非常简单 另请参阅FredrikNormén的this post