簡體   English   中英

EFCore在dbcontext的生存期內使用單個dbconnect

[英]EFCore use a single dbconnect for the lifetime of dbcontext

我正在使用EFCore將數據傳輸到后端db,我為添加到數據集中的每個特定數量的新對象調用SaveChanges ,我從EFCore調試日志中注意到,它將每次我調用時關閉連接並打開一個新對象SaveChanges

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的整個生命周期中是否只使用一個連接?

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

如果確實需要,可以通過在連接字符串中設置值來控制池,盡管我不建議這樣做,除非您真的知道自己在做什么,否則這些都是使用的主要屬性(來自MSDN ):

Connection Lifetime :將連接返回到池時,會將其創建時間與當前時間進行比較,如果該時間跨度(以秒為單位)超過Connection Lifetime指定的值,則連接將被銷毀。 這在群集配置中用於強制正在運行的服務器和剛剛聯機的服務器之間實現負載平衡。 零(0)值將導致池連接具有最大超時。

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

Enlist :為true時,如果存在事務上下文,則池管理器會自動在創建線程的當前事務上下文中加入連接。

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

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

池化 :為true時,從適當的池中提取連接,或者在必要時創建並添加到適當的池中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM