2

私は MVC4 プロジェクトに取り組んでいます。このプロジェクトでは、それぞれに検索用のストアド プロシージャがいくつかあるさまざまなデータベースを使用する必要があります。このサイトは、既存のさまざまなシステムにクエリを実行する必要がある資産検索ツールです。EF が独自にモデルを生成できるようにすると、各データベースで使用する各プロシージャのモデルが作成されます。

私が好むのは、独自の POCO モデルが既に定義されていて、EF がその結果をそのモデルにマップすることです。したがって、データがどのデータベースから取得されたかに関係なく、同じモデルにマップされます。各データベースの列名はわずかに異なるため、実際には列をモデル プロパティにマッピングする必要があります。

データベースへの書き戻しはなく、純粋にデータを選択します。

「Edit Function Import」フォームで、結果に基づいてモデルを作成できます。「関数のインポート マッピング」を表示するオプションもありますが、探している機能が表示されません。

他の誰かがこれを試しましたか?

問題の説明に役立つ画像を追加しました

データ アクセスの説明

これに最も近いのは、EDMX1 クエリ 2 データベースを使用することです。これは、同じ Db サーバー上にあるためにのみ機能します。ストアド プロシージャで Db 名を完全修飾する必要がありました。次に、1 つの EF モデルを 2 つのクエリの戻り値の型として使用できます。ただし、そのモデルは別の EDMX ではまだ使用できないため、別の Db サーバーに接続する必要がある場合でも、モデルを共有することはできません。したがって、問題は解決されません。

これが現在の進行状況のイメージです。

これまでの進捗

4

1 に答える 1

1

関数インポート マッピングは、ストアド プロシージャ/関数呼び出しを EF コードにマッピングするためのものです。ストアド プロシージャを使用していない限り、ここではあまり関係ありません (これは EF で 90% の確率で使用する方法ではありません。より複雑な手順にはストアド プロシージャのみを使用してください)。

EF コンテキストは、その性質上、1 つのデータベースしか関連付けることができません。一度に複数のデータベースにアクセスするには、複数のコンテキストを作成する必要があります。

あなたのケースで私がすることは、データベースごとにデータベース ファースト スキーマ (.edmx) ファイルを作成し、その上にサービス レイヤーの抽象化を記述して、データを期待されるモデルにフラット化できるようにすることです。これは、一度に作業しているデータベースの数に関係なく、私が常に行っていることです。最初の図でこれをほぼ概説しました。サービス層には複数のクラス (たとえば、ブログ Web サイトの場合、BlogService、UserService、CommentService など) が含まれる場合があり、それぞれにアプリケーション層から呼び出すメソッドが含まれます。

説明に役立つ簡単な図をまとめました

http://www.griffy.com/go/publish/image/4818386/L.png

サービス レイヤーはすべての EF 作業を行い、アプリケーション レイヤー (またはビジネス レイヤー、任意の呼び名) はすべてのビジネス ロジックを実行します。

このセットアップは、TDD と依存性注入/IoC に適しています。すべてがきれいで、きれいに分離されています。

于 2013-08-20T10:50:40.083 に答える