我正在构建一个.NET 4.0 MVC3应用程序。我使用Entity Framework 4.1和Ninject将我的存储库注入控制器:
Bind(Of IDataContext).To(Of DataContext)().InRequestScope()
我有一个带有动作的控制器,它利用MyObject(POCO实体)静态函数并将存储库对象传递给它。该函数应该检查db对象是否填充了正确的数据(并返回布尔值):
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的情况下才会失败。
你有什么想法我可以解决这个问题吗?
答案 0 :(得分:2)
您需要在连接字符串中添加MultipleActiveResultSets=true;
。
这是EF正常工作的要求。