在两个DBcontext上运行查询

时间:2013-10-28 17:12:40

标签: vb.net asp.net-mvc-3 linq linq-to-sql dbcontext

我正在尝试针对两个上下文运行查询,每次都会出现此错误:

  

无法创建类型的常量值   'CC_Metrics_Apps.RefQutReturns'。只有原始类型('如Int32,   在此上下文中支持String和Guid'。

我试图像这样查询:

Public Function IDQ() As List(Of RefQutReturns)
  Dim val As List(Of RefQutReturns) = (From x In GlobalVar.db.RET.RefQutReturns
                                       Select x).ToList
  Return val
End Function

Public Function QueTypeDD() As IEnumerable(Of SelectListItem)
  Dim val As New List(Of SelectListItem)
  Dim valQ = From v In GlobalVar.db.PS.TaskQueueTypes
             Join x In IDQ() On v.QutID Equals x.QutID.ToString
             Select v
  val.Add(New SelectListItem With {.Text = "Select Item", .Value = 0})
  For Each v In valQ
    val.Add(New SelectListItem() With {.Text = v.QutDesc, .Value = v.QutID})
  Next
  Return val
End Function

1 个答案:

答案 0 :(得分:1)

EF不支持跨越多个上下文的查询。在大多数情况下,可能无法在一个数据库中创建和运行这样的查询,因为它必须访问不同的数据库(跟踪实体可能也会有问题)。如果您有两个上下文但在一个数据库上工作,则可能需要合并上下文。否则,您需要将两个上下文的结果都带到客户端,并使用Linq To Objects查询将它们组合在一起。 另请注意,在您的情况下,您正在将Linq To Object查询(由于.ToList()中的IDQ())与Linq To Entities混合 - 这也不受支持,因为EF不知道如何使物化非 - 将执行查询的数据库的原始结果。