0

我们有一个 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 动态更改它的连接?

4

1 回答 1

0

我正在考虑您的域服务类的实例化模型。您是否尝试过自定义IDomainServiceFctory?它允许您决定何时创建它们的新实例,并且实现起来非常简单。
另请查看 Fredrik Normén 的这篇文章

于 2012-09-08T07:37:56.317 回答