.NET ToLookup () (System.Linq) и подключение к базе данных - PullRequest
1 голос
/ 09 декабря 2011

Я создаю приложение .NET 4.0 MVC3. Я использую Entity Framework 4.1 и Ninject, чтобы внедрить мой репозиторий в контроллеры:

Bind(Of IDataContext).To(Of DataContext)().InRequestScope()

У меня есть контроллер с действием, который использует статическую функцию MyObject (сущность POCO) и передает ему объект репозитория. Эта функция должна проверять, заполнен ли объект БД правильными данными или нет (и возвращать логическое значение):

Dim isComplete as Boolean = MyObject.IsComplete(_context, id, qid)

Функция IsComplete (пока это пустышка) выглядит следующим образом:

Public Shared Function IsComplete(context As IDataContext, id As Integer, qid As Integer) As Boolean
    Dim lookUp As Lookup(Of Integer, Integer) =
    context.QuestionBlockAnswers.Where(Function(m) (m.BlockId = id AndAlso m.QuestionAnswer.QuestionField.Question.QuestionGroup.QuestionnaireVersion.QuestionnaireId = qid)).ToLookup(Function(m) m.QuestionAnswer.QuestionField.Question.Id, Function(m) m.QuestionAnswerId)
    Return True
End Function

Как видите, он только инициализирует переменную lookUp и возвращает true. Проблема в том, что этот lookUp дает мне тяжелые времена. Если я вызываю действие (в данном случае я использую вызов ajax), я получаю сообщение об ошибке:

[InvalidOperationException]: There is already an open DataReader associated with this Command which must be closed first.

Если я прокомментирую инициализацию переменной lookUp, я больше не получаю ошибку. Это также не проблема с передачей контекста в качестве параметра статической функции, потому что я делаю это для некоторых других объектов, и он работает нормально. Сбой только в этом случае, когда используется ToLookup.

У вас есть идеи, как я могу исправить эту проблему?

1 Ответ

2 голосов
/ 09 декабря 2011

Вам необходимо добавить MultipleActiveResultSets=true; в строку подключения.

Это требование для правильной работы EF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...