多くのデータベースがあるため、3 つ以上のモデルを含むプロジェクトがよくあります。
2 つの異なるコンテキストを持つ 2 つの EDMX セットアップを作成します。通常どおりアプリケーション DB1 コンテキストを作成し、追加のコンテキストを作成して、関心のあるテーブルのみを DB2 から取得します。
長期的に生活を楽にし、保守を容易にするために、一般にモデルごとに DLL を作成して、独自の名前空間を持つようにします。これにより、たとえば DB1 のユーザーと DB2 のユーザーを区別し、エンティティを追加または削除できます。一方は他方に影響を与えません。
各 DLL には、次のようなデータを取得する app.config 接続文字列があります。
<add name="DB1Entities" connectionString="metadata=res://*/DB1Model.csdl|res://*/DB1Model.ssdl|res://*/DB1Model.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=ClientDb;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="DB2Entities" connectionString="metadata=res://*/DB2Model.csdl|res://*/DB2Model.ssdl|res://*/DB2Model.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=ClientMaster;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
<add name="DefaultConnection" connectionString="Data Source=(local);Initial Catalog=Reports;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
各接続文字列を Dll の App.config からアプリケーションの app.config またはサイトの web.config ファイルにコピーすることを忘れないでください。
プロジェクトで DLL を参照し、コンテキストをロードします。
DB1Entities DB1Context = new DB1Entities()
DB2Entities DB2Context = new DB2Entities()
DB1 エンティティーと DB2 エンティティーをうまく区別して、このように一方のコンテンツを他方のエンティティーで使用できるようになりました。
var address1 = DB1Context.Addresses.Single(a => a.AddressId == 1);
var address2 = DB2Context.Addresses.Single(a => a.Id == address1.GlobalAddressId);