我正在尝试针对两个上下文运行查询,每次都会出现此错误:
无法创建类型的常量值 '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
答案 0 :(得分:1)
EF不支持跨越多个上下文的查询。在大多数情况下,可能无法在一个数据库中创建和运行这样的查询,因为它必须访问不同的数据库(跟踪实体可能也会有问题)。如果您有两个上下文但在一个数据库上工作,则可能需要合并上下文。否则,您需要将两个上下文的结果都带到客户端,并使用Linq To Objects查询将它们组合在一起。
另请注意,在您的情况下,您正在将Linq To Object查询(由于.ToList()
中的IDQ()
)与Linq To Entities混合 - 这也不受支持,因为EF不知道如何使物化非 - 将执行查询的数据库的原始结果。