跨多个数据库的ADO.Net实体框架

时间:2009-03-04 11:39:23

标签: linq-to-entities

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the source

有没有办法在Linq 2 Entities / ADO.net Entity Framework中实现这一目标?可以将数据库名称添加到表名吗?

我尝试将'Schema'从dbo更改为 MyDatabase.dbo ,但EF将其封装到

SELECT FROM [MyDatabase.dbo].[MyTable]

将“架构”更改为'MyDatabase'的诡计。[dbo'将被转义为

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

(记住两个]]。)

2 个答案:

答案 0 :(得分:8)

首先,this isn't officially supported

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

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

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

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

答案 1 :(得分:1)

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

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