在以下代碼中,當第二次foreach時會拋出該異常,原因是:由於Entity在讀取數據的時候使用的是DbDataReader進行讀取,當作為IEnumuerable<T>對象MoveNext進行操作時,只是使用DbDataReader進行一次Read操作,因此當查詢的結果未完全讀取完的時候,數據庫連接一直被占用,當再次進行查詢操作時便回出現上面的異常。
解決辦法有兩個:
1.在鏈接字符串中加入 MultipleActiveResultSets=true,但需要注意的是該方案只適合Sql Server 2005以及以上版本
2.使用ToList()方法,將IQueryable轉為List
using (var context = new MyDbContext()) { var blogs = from blog in context.BlogPosts where blog.Comments.Any() select blog; foreach (var blog in blogs) { Console.WriteLine("Blog Post: {0}", blog.Title); foreach (var comment in blog.Comments) { Console.WriteLine("\t{0}", comment.Comments); } } }