【问题标题】:ADO.Net Entity Framework across multiple databases跨多个数据库的 ADO.Net 实体框架
【发布时间】:2009-03-04 11:39:23
【问题描述】:

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 中实现这一点?可以在表名中添加某处的数据库名吗?

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

SELECT FROM [MyDatabase.dbo].[MyTable]

将 'Schema' 更改为 'MyDatabase].[dbo' 之类的技巧将转义为

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

(注意这两个]]。)

【问题讨论】:

    标签: linq-to-entities


    【解决方案1】:

    首先,this isn't officially supported。

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

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

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

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

    【讨论】:

    • 视图只有在每个数据库都在同一个数据库服务器上时才能正常工作,否则你会跨数据库。在 sql 2005+ 中,我相信同义词也可以工作,但我不是 100%。至于丢失的更改,如果您停止使用该设计并手动编辑四个文件,这将不再是问题。
    • 我试图将 Schema 属性从 dbo 更改为例如 OtherDatabase.dbo,但无济于事。在这些更改之后,查询会引发异常“无效的对象名称 OtherDatabase.dbo.MyTable”。
    • Nath,如果在不同的服务器上,您将需要使用链接服务器(使用 EF 或 LINQ-to-SQL)。山姆,那么试试 VIEW 方法。
    • Craig,我需要在运行时在一些数据库之间切换,我不知道如何使用 Views 解决 那个 - 所以我(再次)陷入困境。跨度>
    • 嗯,您也不能使用 LINQ to SQL 技术来做到这一点。我认为您将不得不使用单独的模型并更改连接字符串。见blogs.msdn.com/adonet/archive/2008/11/25/…
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多