3

現時点では、ObjectContext の接続文字列が動的なアプリケーション (web/silverlight) があります。私の顧客はそれぞれ独自のデータベースを持っているため、ユーザーのログイン方法に基づいています。つまり、ユーザー名@ドメインです。ObjectContext をコンストラクター経由で渡すか、GetConnectionString をオーバーライドすることで、EFContextProvider を使用する方法を見つけようとしていますが、残念ながら両方ともサポートされていません。

これを達成する方法はありますか、または EFContextProvider のソースをどこかにダウンロードして、自分で実装できますか?

前もって感謝します。

この質問は、Marcel によって IdeaBlade フォーラムに投稿されました。Breeze Stack Overflow コミュニティに役立つと思うので、ここに質問と回答を再投稿します。

4

3 に答える 3

6

このような単純なことのために、ソースをダウンロードして変更する必要はありません。そして今、あなたはする必要はありません.

の簡単な更新を GitHub にプッシュしましたEFContextProvider。この変更は、次の Breeze ランタイム バージョン (> 0.81.2) で表示されます。

EFContextProvider次のように「T」(ObjectContext/DbContext) を作成するために使用される場所:

_context = 新しい T();

T CreateContext()代わりに、デフォルトの実装が次の仮想メソッドを呼び出すようになりました。

保護された仮想 T CreateContext() {
    新しい T() を返します。
}

サブクラスでそれをオーバーライドして置き換えると、EFContextProviderタイプ「T」のコンテキストを好きなように作成できます。

注意: ベースEFContextProviderは、期待どおりに動作することを確認するために、作成後に少し設定を行います。コンテキストが遅延読み込みやプロキシの作成を行うことは望ましくありません。

したがって、「T」が のObjectContext場合、プロバイダーは次のようにします。

objCtx.ContextOptions.LazyLoadingEnabled = false;

'T' が a の場合、次のDbContextようになります。

dbCtx.Configuration.ProxyCreationEnabled = false;
dbCtx.Configuration.LazyLoadingEnabled = false;
于 2013-01-05T01:22:29.017 に答える
1

Ward が言及した CreateContext 仮想メソッドは、v 0.83.2 で利用できるようになりました。

于 2013-01-06T07:45:37.580 に答える
1

ソースをダウンロードし、T のインスタンスを受け入れる EFContextProvider にコンストラクターを追加して、魅力的に機能する既存の ObjectContext/DbContext を使用できるようにしました。

マルセルは自分でそれを理解し、私たちのフォーラムで彼自身の質問に答えました.

于 2012-11-29T00:24:30.547 に答える