2017-07-26 95 views
0

我使用EFCore將數據傳輸到後端數據庫,我爲每個添加到數據集的每個特定數量的新對象調用SaveChanges,我從EFCore調試日誌中注意到它將關閉連接並打開一個新的每一個我稱之爲SaveChanges時間:EFCore在dbcontext的生命週期中使用單個dbconnect

Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Opening connection to database ... 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Beginning transaction with isolation level 'Unspecified'. 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Committing transaction 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Closing connection to database... 
.... the logs repeats forever 

所以反正是有隻使用一個DbContext的整個生命週期的一個連接?

+2

問題:爲什麼你關心連接? – DavidG

+0

答案:性能。 – fluter

+0

什麼讓你覺得它會更快? – DavidG

回答

5

你根本沒有必要改變它的工作方式,甚至根本不用擔心。默認情況下,SQL Server連接只是放回到連接池中,因此實際上它不會關閉。打開一個新的將抓住池中的下一個可用。

如果您真的想要通過設置連接字符串中的值來控制池,但除非您真的知道您在做什麼,否則這些是使用的主要屬性(從MSDN起):

連接生存期:如果該時間長度(以秒爲單位)超過由連接生存期指定的值當連接被返回到池,將其創建時間與當前時間進行比較,並且該連接被破壞。這在羣集配置中非常有用,可以強制正在運行的服務器和剛剛聯機的服務器之間的負載平衡。 零值(0)將導致池連接有最大超時。

連接重置:確定從池中刪除數據庫連接時是否重置。對於Microsoft SQL Server 7.0版,設置爲false可避免在獲取連接時進行額外的服務器往返,但您必須知道連接狀態(如數據庫上下文)未被重置。

列表:如果事務上下文存在,則該池在自動創建線程的事務上下文中自動註冊連接。

最大池大小:池中允許的最大連接數。

最小池大小:池中維護的最小連接數。

合併:如果爲true,則連接從適當的池中提取,或者在必要時創建並添加到適當的池中。