Главное здесь - знать, когда ваши запросы LINQ будут запущены.Когда эта строка кода выполняется:
qperson = (From p in dbContext.People _
Where p.name = "John" _
Select p)
запрос не отправляется на сервер.Вместо этого вы возвращаете объект, который реализует интерфейс IQueryable (Of T), который описывает, что представляет собой запрос.На самом деле запрос не отправляется на сервер и не выполняется до тех пор, пока вы не начнете использовать результаты, например, в цикле For Each.Это называется отложенным выполнением и является фундаментальным для LINQ.
Так что это значит для вас?Что ж, это означает, что контекст не должен быть удален перед выполнением запроса.До сих пор в примерах это не всегда верно.(Вложенный ответ может сделать это, в зависимости от того, что на самом деле происходит внутри вложенного использования.)
Типичный способ справиться с этим - заставить выполнение запроса произвести сбор в памяти результатов передконтекст удаляется.Метод расширения ToList () является распространенным способом сделать это.Так, например:
Dim qperson As IList(Of Person)
Dim qyou As IList(Of Customer)
Using dbContext as mydb_entities = New mydb_entities
qperson = (From p in dbContext.People _
Where p.name = "John" _
Select p).ToList()
End Using
Using dbContext as yourdb_entities = New yourdb_entities
qyou = (From p in dbContext.Customer _
Where p.name = "John" _
Select p).ToList()
End Using
Теперь вы выполнили запросы и сохранили результаты в памяти до того, как контексты были расположены, и вы можете счастливо делать с ними то, что хотите.