我经常有包含三个以上模型的项目,因为我们有很多数据库。
我将创建一个具有两个不同上下文的两个 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);