繁体   English   中英

如何使用LINQ2SQL连接两个不同上下文的表?

[英]How To Join Tables from Two Different Contexts with LINQ2SQL?

我的应用程序中有2个数据上下文(不同的数据库),需要能够在上下文中查询上下文A中的表,并在上下文中的表上使用右连接。如何在LINQ2SQL中执行此操作?

为什么?:我们正在使用SaaS产品来跟踪我们的时间,项目等,并希望向此产品发送新的服务请求,以防止我们的团队重复数据输入。

上下文A:此数据库存储服务请求信息。 它是第三方数据库,我们无法更改此数据库的结构,因为它可能会在下游产生意外的不可支持的后果。

上下文B:此数据存储已处理的服务请求的“日志”数据。 我和我的团队可以完全控制这个数据库的结构等。未处理的服务请求应该进入这个数据库,另一个进程会将其识别为未处理并将记录发送到SaaS产品。

这是我想要修改的查询。 我最初能够做一个!list.Contains(c.swHDCaseId),但这不能处理超过2100个项目。 有没有办法将连接添加到其他上下文?

var query = (from c in contextA.Cases
             where monitoredInboxList.Contains(c.INBOXES.inboxName)
             //right join d in contextB.CaseLog on d.ID = c.ID....
             select new
             {
                 //setup fields here...
             });

您可以尝试使用GetTable命令。 我认为这首先会加载所有contextB.TableB的数据,但不是100%肯定。 我没有设置环境或测试这个,所以让我知道它是否工作=)

from a in contextA.TableA
join b in contextB.GetTable<TableB>() on a.id equals b.id
select new { a, b }

在数据库解决方案之外,最好的办法是在执行后使用LINQ(对象)进行连接。

我意识到这不是你所希望的解决方案。 至少在这个级别,你不必担心IN列表限制(.Contains)

编辑: 上面的数据库解决方案之外真正指向链接服务器解决方案,其中允许来自上下文A的表/视图从上下文B存在于数据库中。

如果你不能将2个表提取到List对象然后加入它们那么你可能需要做一些数据库方面的事情。 我建议在您可以控制的数据库服务器上创建链接服务器和视图。 然后,您可以在视图中执行连接,并且您将拥有一个非常简单的LINQ查询来检索视图。 我不确定LINQtoSQL如何在指向2个不同服务器的2个数据上下文之间进行连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM