繁体   English   中英

如何在一个LINQ请求中使用两个不同的数据上下文?

[英]How can I use two different data contexts in one LINQ request?

有人可以帮助我吗:如何在一个LINQ请求中使用两个不同的数据上下文?

using (var db = new DataMapDataContext(Connection))
        {    
            using (var dbAdd = new DataMapDataContext(ConnectionAdd))
            {
                return (from i in dbAdd.ITEMs
                        join p in db.U_OTT_PINs on i.ITEMNO equals p.PIN_CODE
                        where p.PIN_TYPE == Utils.PinItem
                        select ...
            }
        }

可能吗?

更新:

我解决了我的问题,但没有使用不同的数据上下文:

        var listPinnedItems = new List<string>();
        using (var db = new DataMapDataContext(Connection))
        {
            listPinnedItems = (from lpi in db.U_OTT_PINs
                               where lpi.PIN_TYPE == Utils.PinItem
                               select lpi.PIN_CODE).ToList();
        }

        using (var dbAdd = new DataMapDataContext(ConnectionAdd))
        {
            return (from i in dbAdd.ITEMs
                    where listPinnedItems.Contains(i.ITEMNO) 
                    ...

恐怕LINQ to SQL不能用于跨不同数据库的查询。 请参阅下面的可能的解决方法?

http://social.msdn.microsoft.com/forums/zh-CN/linqprojectgeneral/thread/3a15002c-704d-49f9-a8cc-0d2bde186e1d

我不这么认为-这两个不同的上下文可能涉及同一数据库中的不同事务,甚至可能与完全不同的数据库实例通信。 它如何构造SQL以在两者之间工作?

如果您可以解释您要做什么,我们可能会为您提供更多帮助。

可以使用两个数据上下文,但是不能同时在两个数据库之间进行数据库查询。 但是,您可以获取查询中涉及的数据,并使用通用linq语句(linq2objects)查询对象。

这是首先问“ 您要达到什么目标? ”不应该回答的问题之一。

两个数据上下文都指向相同的数据库还是不同的数据库?

如果它们连接到同一数据库,而拥有两个数据库的唯一原因是您已分离了实体,那么您可以仅使用一个DC查询“属于”另一个数据上下文的表。 只需使用GetTable,L2S将根据类和成员属性解析映射。

如果它们指向同一服务器上的不同数据库,并且您要连接到其中一个数据库的登录名具有从第二个数据库读取的权限,则可以通过简单地添加以下内容将一个数据库中的表包含在基于另一个数据库的数据上下文中:数据库名称作为.dbml文件中的前缀。

暂无
暂无

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

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