4

.net Entity Framework プロジェクトに 2 つの異なるバックエンドを使用できますか?

可能であれば、SQL サーバーでストアド プロシージャの完全なプログラミング サポートをサポートする必要があります。SQL サーバーが利用できない場合、.mdb ファイルでテーブル構造のみをサポートする必要があります。

Entity Framework より上のすべてのビジネス ロジックは、データベースに直接アクセスするのではなく、エンティティの抽象化を使用します。エンティティ モデルは、ストアド プロシージャ呼び出しまたは動的 SQL のいずれかを使用して、データベース テーブルの読み取り/書き込みを行うことができます。

2 つの論理的に同一のエンティティ モデルを作成し、それぞれデータベースへのマッピングが異なります (1 つはフレームワークによって管理され、もう 1 つはストアド プロシージャによって管理されます)。 ?

4

1 に答える 1

2

この同様の SO questionが表示されるはずです。実行時にこれを実行できるかどうかはわかりませんが、展開後にこれが可能であることがわかりました. 注意してください、間違いなく落とし穴があります。

異なるデータベース バックエンド間で生成される EDMX ファイルの主な違いは、MSL と SSDL です。私が行ったことは、各データベースとは別に EDMX ファイルを生成することです。どちらも同じ論理データ モデル (CSDL) を持っています。次に、MSL ファイルと SSDL ファイルを抽出し、別のファイルに保存します。それが完了したら、接続文字列でこれらのファイルの正確な場所を指定できます (図を参照)。

<add name="DBConnection" connectionString="metadata=C:\sqlServerEntities.csdl|C:\sqlServerEntities.ssdl|C:\sqlServerEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=[machinename];Initial Catalog=[databasename];Persist Security Info=True;User ID=[user];Password=[password];MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

<add name="DBConnection" connectionString="metadata=C:\mdbEntities.csdl|C:\mdbEntities.ssdl|C:\mdbEntities.msl;provider=[mdb provider namespace];provider connection string=[DB connection string]" providerName="System.Data.EntityClient" />

接続先のデータベースに基づいて、実行時に適切な接続文字列を使用する必要があります。ただし、あるシナリオではストアド プロシージャを使用し、別のシナリオではテーブル ベースのマッピングを使用するのが難しいのではないかと心配しています。

もう 1 つの注意事項: プロジェクトに両方の EDMX モデルを残すことはできません。そうしないと、(重複したクラス定義に基づいて) コンパイラ エラーが発生します。ただし、生成された論理クラスをコンパイラが認識できるように、プロジェクトに 1 つ残す必要があります。

于 2008-11-20T19:23:59.627 に答える