5

私は完全に立ち往生しているように見えるので、誰かが私を助けてくれることを願っています。

当社の今後のプロジェクトでは、コード ファーストのアプローチで Entity Framework 5 を使用したいと考えています。少し遊んでみましたが、既存のライブラリで EF を使用しようとするたびに、EF が既存の app.config に大きく依存しているように見えるため、失敗します。

当社では、データベース プロバイダー向けの MEF (マネージド拡張性フレームワーク) を利用して、さまざまなデータ ソースやデータベース テクノロジに接続できる社内データベース ライブラリを用意しています。ホスト (またはファイル)、カタログ、ユーザー資格情報、データベース プロバイダー名などのデータベース設定を渡すだけで、ライブラリが適切なプラグインを探して、カスタム接続文字列または IDbConnection を返します。このライブラリを EF と一緒に使用したいと考えています。これにより、使用するデータベースについて柔軟に対応でき、実行時にデータベースを変更することもできます。

そう。典型的な DbContext オブジェクトは、コンストラクターでパラメーターを取らないことがわかりました。app.config で適切な接続文字列が自動的に検索されます。私たちはそのようなことを好まないので、デフォルトのコンストラクターを変更して、DbContext 基本クラスに渡される DbConnection オブジェクトを取得するようにしました。全く取引しません。

コード ファースト モデルが変更されると、問題が発生します。EF はこれを自動的に認識し、移行クラス/構成を探します。ただし: 典型的な移行クラスでは、コンテキストにデフォルトのパラメーターなしのコンストラクターが必要です! お気の毒に!

そのため、IDbContextFactory インターフェイスを使用して独自の移行クラスを構築します。しかし、繰り返しになりますが、この IDbContextFactory にもパラメーターなしのコンストラクターが必要なようです。そうしないと、移行を追加したり、データベースを更新したりできません。

さらに、コンテキストとターゲット データベースを渡す独自のデータ移行コンフィギュレーターを作成しました。ここに問題があります。何を試しても、移行クラスが見つかりません。

EF を使用する唯一の方法は、接続文字列が app.config に保存されているときだけだと思われるため、完全に行き詰まっています。実行時にデータベース接続を変更する必要があり、 app.config はデフォルトのユーザーに対して読み取り専用であるため、これはばかげています!

これを解決するには?

4

2 に答える 2

0

それを呼び出すには、パラメーターなしのコンストラクターが必要です。あなたができることはDbConntectionFactory、次のような空のコンストラクターでデフォルトを提供することです:

public DbContext()
{
    IDbContextFactory defaultFactory; //initialize your default here
    DbContext(defaultFactory);
}

public DbContext(IDbContextFactory factory)
{
}
于 2013-04-25T09:33:06.120 に答える