对于未来的读者。
当我有一个多结果存储过程时出现此错误。
如此处所示:
http://msdn.microsoft.com/en-us/data/jj691402.aspx
如果您尝试访问第一个结果中的项目,在执行 a 之后.NextResult
,您可能会收到此错误。
来自文章:
var reader = cmd.ExecuteReader();
// Read Blogs from the first result set
var blogs = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<Blog>(reader, "Blogs", MergeOption.AppendOnly);
foreach (var item in blogs)
{
Console.WriteLine(item.Name);
}
// Move to second result set and read Posts
reader.NextResult();
var posts = ((IObjectContextAdapter)db)
.ObjectContext
.Translate<Post>(reader, "Posts", MergeOption.AppendOnly);
foreach (var item in posts)
{
Console.WriteLine(item.Title);
}
现在,如果在行之前
foreach (var item in posts)
你输入这段代码
Blog foundBlog = blogs.FirstOrDefault();
我认为您可以模拟错误。
经验法则:
你还是要把这个东西当成DataReader
(消防水管)。
为了我的需要,我不得不转换为List<>
.
所以我改变了这个:
foreach (var item in blogs)
{
Console.WriteLine(item.Name);
}
对此:
List<Blog> blogsList = blogs.ToList();
foreach (var item in blogsList )
{
Console.WriteLine(item.Name);
}
而且我能够导航对象而不会出现错误。
这是我遇到的另一种方式。
private void DoSomething(ObjectResult<Blog> blogs, ObjectResult<Post> posts)
{
}
然后在这段代码之后(在原始示例中)
foreach (var item in posts)
{
Console.WriteLine(item.Title);
}
输入这段代码:
DoSomething(blogs,posts);
如果我调用该例程并开始访问博客和帖子中的项目/属性,我会遇到这个问题。我明白为什么,我应该第一次抓住它。