1

2つ以上のデータベースにまたがることができる1つのMVCモデルを使用できるEntityFramework5を使用したいと思います。

これは可能ですか?

つまり、2つ以上のデータベースを使用できるEFモデルが1つあります。MVCでは、ビューで使用できるモデルは1つだけであるためです。一部のビューを含む一部のデータは、異なるデータベースから取得できます。MVCでモデルバインダーを使用してEF5列にマップするには、これを実行する必要があります。

4

3 に答える 3

2

ASP.NETMVCはEntityFrameworkに依存していません。

ASP.NET MVCは、ModelViewControllerパターンに固執するWebアプリケーションを構築するためのフレームワークです。EntityFrameworkに制限されていません。LINQ2SQL / Entity Framework / Pure ADO.NETなどの任意のデータアクセステクノロジで動作します。つまり、EntityFrameworkを使用してまたは使用せずにMVCアプリケーションを開発できます。

2つの異なるデータベースからデータを取得し、モデルオブジェクトをロードするとします。これを行うには、2つのデータベースからデータを取得し、それをストアドプロシージャに配置し、そのプロシージャをDbContextが通信しているデータベースに配置するselectクエリを記述します。次に、ストアドプロシージャを実行し、Modelオブジェクトをロードします。

2つのデータベースからデータを取得するサンプル手順

CREATE PROCEDURE GetCustomer(@id int)
AS
  BEGIN
    SELECT C.ID,A.DateReceived
    FROM  FirstServerName.DbName.dbo.Customer C
    INNER JOIN  SecondServerName.DbName.dbo.Applications A
    ON A.CustomerID=C.CustomerID
    AND A.CustomerID=@id
  END

Entity Frameworkでストアドプロシージャを実行するには、Database.SqlQueryメソッドを使用できます

  var idParam = new SqlParameter { ParameterName = "@Id", Value = 414};
  var result = context.Database.SqlQuery<Customer>
                                      ("exec GetCustomer @Id", idParam).ToList();

これにより、procが実行Customerされ、結果セットの構造とモデルのクラス構造が類似していると仮定して、データがクラスのインスタンスにロードされます。

関連するデータベース/テーブルからデータを読み取るには、ストアドプロシージャの権限を調整する必要がある場合があります。

于 2012-10-11T20:42:28.740 に答える
0

上記のように、MVCのMはあなたが望むものです。Microsoftは、モデルが実際に何であるかを指定していません。それは確かにEFモデルである必要はありません(MSからのいくつかのコードサンプルは例としてそれを使用していますが)

MはViewModelであり、データレイヤーとは無関係である必要があることをお勧めします。次に、Automapperなどのツールを使用して、ドメインモデルからViewModelにマップします。ViewModelは、表示するデータと、表示する特定のWebビュー固有の情報をカプセル化します。次に、ViewModelをポストバックするときに、それを使用してドメインモデルの適切なフィールドなどを更新し、両方のデータベースに保持できます。これは、ViewModelsのテーマに関する優れた記事ですhttp://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/

于 2012-10-11T22:04:06.667 に答える
0

Shyjuが言っているのは、MVCはEntityFrameworkのデータモデルやデータベースについて何も気にしない、または何も知らないということです。そのため、MVCモデルが2つのデータベースにまたがることができるという考えは、飛行機が2つのハンマーにまたがることができると言っているようなものです。

于 2012-10-11T20:47:33.780 に答える