2つ以上のデータベースにまたがることができる1つのMVCモデルを使用できるEntityFramework5を使用したいと思います。
これは可能ですか?
つまり、2つ以上のデータベースを使用できるEFモデルが1つあります。MVCでは、ビューで使用できるモデルは1つだけであるためです。一部のビューを含む一部のデータは、異なるデータベースから取得できます。MVCでモデルバインダーを使用してEF5列にマップするには、これを実行する必要があります。
2つ以上のデータベースにまたがることができる1つのMVCモデルを使用できるEntityFramework5を使用したいと思います。
これは可能ですか?
つまり、2つ以上のデータベースを使用できるEFモデルが1つあります。MVCでは、ビューで使用できるモデルは1つだけであるためです。一部のビューを含む一部のデータは、異なるデータベースから取得できます。MVCでモデルバインダーを使用してEF5列にマップするには、これを実行する必要があります。
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
され、結果セットの構造とモデルのクラス構造が類似していると仮定して、データがクラスのインスタンスにロードされます。
関連するデータベース/テーブルからデータを読み取るには、ストアドプロシージャの権限を調整する必要がある場合があります。
上記のように、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/
Shyjuが言っているのは、MVCはEntityFrameworkのデータモデルやデータベースについて何も気にしない、または何も知らないということです。そのため、MVCモデルが2つのデータベースにまたがることができるという考えは、飛行機が2つのハンマーにまたがることができると言っているようなものです。