日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EntityFramework 6.x和EntityFramework Core必须需要MultipleActiveResultSets?

發布時間:2025/3/21 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EntityFramework 6.x和EntityFramework Core必须需要MultipleActiveResultSets? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本節我們來探討到底需不需要在連接字符串上加上MultipleActiveResultSets = true ?,若您有更深層次的理解歡迎留下您的腳印。

EntityFramework 6.x和EntityFramework Core需要MultipleActiveResultSets?

很多童鞋遇到如下圖中錯誤就立馬想到在連接字符串上加上?MultipleActiveResultSets = true ,但是這樣真的是最終解決方案么?

下面我們來看一段在EntityFramework 6.x中的代碼,演示如上問題的出現。

using (var ctx = new EfDbContext()){ctx.Database.Log = Console.WriteLine;var customers = ctx.Customers;foreach (var customer in customers){ctx.Entry(customer).Collection(d => d.Orders).Load();}};

當您在EntityFramework 6.x中運行上述代碼就會拋出如上圖異常(不要關心上述代碼是否合理,或許您可能說直接使用顯式加載對吧,如上代碼旨在引出問題)。然后我們在連接字符串上如下加上一句就可以解決問題。

connectionString="Data Source=WANGPENG;Initial Catalog=EntityFramework6;Integrated Security=true;MultipleActiveResultSets=True;"

我們知道MultipleActiveResultSets即MARS在SQL Server2005中被引入,意為單連接多請求,但是它非線程安全,在我看來這個特性在ADO.NET中可能非常適用,但是在EntityFramework 6.x中作用不大,雖然如上可以從數據庫連接層面來解決問題,大部分這種情況的出現還是因為代碼寫的有問題,我們直接調用ToList即可,如下:

using (var ctx = new EfDbContext()){ctx.Database.Log = Console.WriteLine;var customers = ctx.Customers.ToList();foreach (var customer in customers){ctx.Entry(customer).Collection(d => d.Orders).Load();}};

我們知道ToList是最終翻譯成SQL語句請求數據庫返回對應數據,即通過ToList既可以打開連接也可以關閉連接,當我們不用ToList時,此時打開了一個連接,同時已經有了一個DataReader,接下來遍歷時則再會在Command上打開一個DataReader加載Orders,此時就會拋出第一個DataReader未關閉的情況,大部分出現這樣的一樣我們都可以通過ToList來解決,當然也可以用延遲加載(關于EF 6.x中延遲加載請謹慎適用,我在我的書中《你必須掌握的EntityFramework 6.x與Core 2.0》中也有講到,除非您明確自己會正確使用)和顯式加載來解決。那在EntityFramework Core中是否運行上述同樣代碼會拋出異常,然后我們需要在連接字符串上加上此特性呢?我們來看看。

using (var context = new EFCoreDbContext()){var blogs = context.Blogs;foreach (var blog in blogs){context.Entry(blog).Collection(p => p.Posts).Load();}}

通過如上圖我們知道完全不會如EntityFramework 6.x中拋出異常,這點有所不同。大部分情況下,出現如上異?;蛟S可能是代碼寫的問題,不一定非得要加上?MultipleActiveResultSets=True;

總結

本文沒有深入探討文章標題,若您有拋出如上異常非得加上MultipleActiveResultSets=True才能解決問題,請留下您的評論,讓我繼續深入學習,在此表示感謝。接下來我會繼續探討和對比EntityFramework 6.x和EntityFramework Core中不為人知的秘密,同時也會陸續更新EF Core 2.1并深入探討。

轉載于:https://www.cnblogs.com/CreateMyself/p/9175636.html

總結

以上是生活随笔為你收集整理的EntityFramework 6.x和EntityFramework Core必须需要MultipleActiveResultSets?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。