Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨多个数据库的LINQ_Linq_Linq To Sql - Fatal编程技术网

跨多个数据库的LINQ

跨多个数据库的LINQ,linq,linq-to-sql,Linq,Linq To Sql,我有两个表需要通过LINQ连接,但它们位于不同的数据库中。现在我返回一个表的结果,然后循环并检索另一个表的结果,正如您所猜测的,这并不是非常有效。有没有办法把它们放到一个LINQ语句中?有没有其他的方法来构造它以避免循环?我只是在寻找想法,以防我忽略了什么 请注意,我不能更改数据库,也就是说,我不能在一个数据库中创建引用另一个数据库的视图。我还没有尝试过在引用两个表的第三个数据库中创建视图。欢迎任何想法。在数据库中创建一个proc/view。鉴于您的条件,我认为您不可能在一个Linq语句中实现这

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


请注意,我不能更改数据库,也就是说,我不能在一个数据库中创建引用另一个数据库的视图。我还没有尝试过在引用两个表的第三个数据库中创建视图。欢迎任何想法。

在数据库中创建一个proc/view。

鉴于您的条件,我认为您不可能在一个Linq语句中实现这一点。但是,您可以将L2S查询的结果合并到Linq to Objects查询中。

您可以这样做,即使跨服务器,只要您可以从一个数据库访问另一个数据库。也就是说,如果可以针对访问ServerB.DatabaseB.schema.table的ServerA.DatabaseA编写SQL语句,那么您可以在LINQ中执行同样的操作

为此,您需要手动编辑.dbml文件。您可以在VS2008中轻松地执行此操作,如下所示:右键单击,选择Open With…,然后选择XML编辑器

查看连接元素,它应该位于文件的顶部。您需要做的是提供一个显式的数据库名和服务器名,如果连接字符串所指向的数据库中没有表,则提供不同的数据库名和服务器名

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

<Table Name="dbo.Customers" Member="Customers">
SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

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

如果担心修改生成的文件,我建议将生成的C或VB类提取到手动控制的文件中,并更改该类的属性。您也可以在O/R-Designer中更改源。只需打开一个表的属性,查找source,它将包含dbo.Customers,并且可以更改为包含数据库名称SomeOtherDatabase.dbo.Customers。因此,这不是黑客行为,更改来源完全可以。我在这里查阅了大量关于这一点的问题和答案,每个人都说这是不可能做到的。。这是办不到的。。这是办不到的。。我很沮丧,但这个答案很有效。只是为了准备它,我必须在一个临时数据库中创建所有表来创建模型,然后返回并修复表名并将其指向生产数据库。虽然花了点力气,但效果很好。为什么你不能更改数据库?第三方。DBA希望远离在那里创建对象,即使它是一个简单的视图。
SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable