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

时间:2010-08-10 09:05:51

标签: c# linq-to-sql

有人可以帮我解决下一个问题:如何在一个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) 
                    ...

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

我不相信 - 这两个不同的上下文可能涉及同一数据库中的不同事务,甚至可能涉及完全不同的数据库实例。如何构建SQL以跨两者工作?

如果你能解释一下你想要做什么,我们可以帮助你。

答案 2 :(得分:0)

可以使用两个datacontexts,但不能同时跨两个数据库查询。但是,您可以使用通用linq语句(linq2objects)获取两个查询中涉及的数据并查询对象。

答案 3 :(得分:0)

如果没有先问“你想要达到什么目标?”,这是其中一个不应该回答的问题。

两个datacontexts是指向同一个数据库还是指向不同的数据库?

如果他们连接到同一个数据库,并且你拥有两个的唯一原因是你已经分离了你的实体,那么你只能使用一个DC来查询“属于”另一个datacontext的表。只需使用GetTable,L2S将根据类和成员属性解析映射。

如果他们指向同一服务器上的不同数据库,并且您正在连接到其中一个数据库的登录,并且有权从第二个数据库中读取数据,那么您可以将数据库中的一个数据库中的表包含在基于另一个数据库的数据文本中只需在.dbml文件中添加数据库名称作为前缀。