0

WCFRIAサービスとEntityFramework4.1を使用してデータベースに接続するSilverlightアプリケーションがあります。

現時点では、接続文字列がweb.config内に標準で提供されており、これはすべて正常に機能します。

ただし、特にユーザーがログインしたことに基づいて、実行時に接続文字列を動的に変更できるようにしたいと考えています。

これを行うことを示唆する他の投稿をいくつか見つけましたが、System.Data.Entity名前空間内のDbContextとDbDomainServiceクラスを使用しているのに対し、それらはObjectContextを使用しています。

これを補うために、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 に答える