我可以在单个.edmx文件中访问两个数据库吗?

时间:2012-04-23 14:02:05

标签: asp.net-mvc asp.net-mvc-3 entity-framework stored-procedures

我创建了mvc3应用程序。

我已经创建了一个.edmx,它基于Db1,但现在 我创建了一个基于Database2的视图,我需要在项目中使用此视图。

为此,我需要更新我的EF .edmx文件。 但是当我右键单击并选择选项Update model from Database时 我只收到all tables , view ,sps from Db1 ` its obvious But as i need to use view which is from Database2 how can i add it into my model。edmx`文件? 请帮忙。

5 个答案:

答案 0 :(得分:2)

如果两个edmx想要合并,那么为两个edmx文件制作部分类相同(将有两个设计器类)。为其他edmx文件添加另一个构造函数并使其参数化。用于标识要加载的edmx的参数。

在此类文件中的edmx partial class的Business层创建对象中添加另一个类文件,在此类中,当你想要加载谁时,edmx文件在edmx partial class constructor的构造函数中传递一些参数以识别哪个连接需要打开。

在edmx设计器类的构造函数中传递参数,基于已确定的页面名称(自定义逻辑或表名称;将加载该edmx。

在Web配置文件中,多个连接字符串可用于多个edmx文件。

答案 1 :(得分:1)

实体框架不支持将多个数据库映射到一个模型/ .edmx文件(参见:unify two models (edmx) with visual studio 2010

因此,您需要为其他数据库创建单独的.edmx文件/模型,并使用单独的上下文引用每个模型。您的项目中也需要2个连接字符串。

答案 2 :(得分:0)

一个“hack”可能是,即MS SQL到link这两个服务器并在第一个服务器上公开来自其他服务器的数据,即通过视图。但我认为它只适用于少数几张桌子。对于巨大的模型,这将是痛苦的。其他数据库(Firebird,Oracle,...)以类似的方式支持这一点。

答案 3 :(得分:0)

我做了什么,在db A中创建了存储过程并通过该SP访问了db B,例如select * from db2.table.then为该特定SP创建一个函数import。

如果您在同一服务器上同时拥有这两个数据库,则此方法很有效。如果它们位于不同的服务器上,您可以在B上创建链接服务器以使用相同的存储过程方法访问A.

答案 4 :(得分:0)

使用ctx作为新实体()

        ctx.Database.Connection.ConnectionString = conString

结束使用