EF 已有打開的與此 Command 相關聯的 DataReader,必須首先將它關閉


在以下代碼中,當第二次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);
                    }
                }
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM