6

在 Linq2Sql 中,您只需将数据库名称添加到源即可将数据上下文连接到多个数据库

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

我试图将“架构”从 dbo 更改为MyDatabase.dbo,但 EF 将其封装到

SELECT FROM [MyDatabase.dbo].[MyTable]

将 'Schema' 更改为'MyDatabase].[dbo'之类的诡计将被转义为

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

(注意这两个]]。)

4

2 回答 2

8

首先,这不是官方支持的。

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

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

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

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

于 2009-03-04T13:10:15.440 回答
1

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

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

于 2011-05-23T18:36:41.210 回答