有没有办法在Linq 2 Entities / ADO.net Entity Framework中实现这一目标?可以将数据库名称添加到表名吗?
我尝试将'Schema'从dbo更改为 MyDatabase.dbo ,但EF将其封装到
中SELECT FROM [MyDatabase.dbo].[MyTable]
将“架构”更改为'MyDatabase'的诡计。[dbo'将被转义为
SELECT FROM [MyDatabase]].[dbo].[MyTable]
(记住两个]]
。)
答案 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文件合并到一个文件中,该文件连接到具有同义词设置的数据库。