2009-03-04 68 views
6

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the source跨多个数据库的ADO.Net实体框架

有没有办法在Linq 2实体/ ADO.net实体框架中实现这一点?数据库名称可以添加到表名中吗?

我试图从DBO的 '模式' 改变为MyDatabase.dbo,但EF封装此成

SELECT FROM [MyDatabase.dbo].[MyTable] 

诡计像改变 '模式' 至'MyDatabase的]。[DBO'将逃进

SELECT FROM [MyDatabase]].[dbo].[MyTable] 

(介意两个]]

回答

8

首先,this isn't officially supported

您链接到LINQ to SQL的答案只是使用数据库服务器执行异构查询的能力。我不明白为什么这对Entity Framework不起作用,因为它是数据库服务器功能,而不是任一框架的功能。换句话说,LINQ to SQL仍在处理连接,就好像只涉及一个数据库服务器一样。但请记住,并非所有数据库服务器都可以这样做。

至于要在EDMX中更改什么,请在“SSDL内容”部分中查找EntitySet节点的Schema属性。

有关此技术的一个警告是,当您从数据库更新模型时,存储模型将被清除并从头开始替换。所以你需要重新应用这些改变。这在LINQ to SQL中不是问题,因为LINQ to SQL根本不支持数据库的自动更新。

更好的选择可能是在数据库中创建一个引用另一个数据库的VIEW并映射该视图,而不是直接映射表和其他数据库。

+0

该视图只有在每个数据库位于同一个数据库服务器上的情况下才能正常工作,否则您要跨数据库。在sql 2005+中,我相信一个同义词也可以工作,但我不是100%。 至于丢失的变化,如果您停止使用设计,并且手动编辑了四个文件,这就不再成为问题。 – NikolaiDante 2009-03-04 13:15:11

1

如果您的数据库支持SQL同义词,则可以将两个数据库定义合并到一个文件中。我最近做了这个,并发布了我如何做的here,如果你有兴趣。

基本上,您在databaseA上创建指向databaseB的同义词,为每个数据库创建单独的edmx文件,然后运行脚本将edmx文件合并到单个文件中,该文件连接到具有同义词设置的任何一个数据库。