跨多个数据库的 LINQ

标签 linq linq-to-sql

我有两个表需要通过 LINQ 连接,但它们位于不同的数据库中。现在我正在返回一个表的结果,然后循环并检索另一个表的结果,正如您可以猜到的那样,这并不是非常有效。有什么方法可以将它们放入单个 LINQ 语句中吗?有没有其他方法可以构造这个以避免循环?我只是在寻找想法,以防我忽略某些东西。

请注意,我无法更改数据库,即我无法在一个数据库中创建引用另一个数据库的 View 。我还没有尝试过在引用这两个表的第三个数据库中创建 View 。欢迎任何想法。

最佳答案

可以执行此操作,即使跨服务器,只要您可以从一个数据库访问另一个数据库即可。也就是说,是否可以针对 ServerA.DatabaseA 编写一条访问 ServerB.DatabaseB.< em>schema。TableWhatever,那么您可以在 LINQ 中执行相同的操作。

为此,您需要手动编辑 .dbml 文件。您可以在 VS 2008 中轻松执行此操作,如下所示:右键单击,选择打开方式...,然后选择XML 编辑器

查看Connection 元素,它应该位于文件的顶部。您需要做的是为不在该连接字符串指向的数据库中的表提供显式数据库名称(以及服务器名称,如果不同)。

.dbml 中 Table 元素的开始标记如下所示:

<Table Name="dbo.Customers" Member="Customers">

您需要做的是,对于连接字符串数据库中的任何表,将名称属性更改为以下之一:

<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">

如果遇到问题,请确保确实可以从原始数据库(或服务器)访问其他数据库(或服务器)。在 SQL Server Management Studio 中,尝试编写一个针对原始数据库运行的小 SQL 语句,执行如下操作:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

如果这不起作用,请确保您的用户或登录名可以使用相同的密码访问这两个数据库。当然,它应该与 .dbml 连接字符串中使用的相同。

关于跨多个数据库的 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352949/

相关文章:

.net - 在这种情况下,StringComparer.CurrentCulture 是正确的选择吗?

c# - 如何通过 linq 查询对组中的元素进行排序,然后选择第一个?

c# - IQueryable.Distinct() 与 List.Distinct()

c# - 如何使用 linq to sql 一次更新多行?

sql-server - 从DBML文件中检索数据库信息

c# - 我可以让这个 Linq to EF 更有效率吗?

c# - LINQ 如何使用 "group by"简化具有重复属性的列表

c# - 延迟执行 - 字典输出

c# - Attribute.IsDefined 看不到应用于 MetadataType 类的属性

linq - 管理 LINQ to SQL .dbml 模型复杂性