我有两个表需要通过 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/