Я создаю приложение .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.
У вас есть идеи, как я могу исправить эту проблему?