簡體   English   中英

ASP.NET 內核瞬態 DbContext

[英]ASP.NET Core transient DbContext


我有多個托管服務,每個都使用數據庫。 我得到了 DbConcurrencyException,因為所有托管服務都同時使用 dbContext 的同一實例(在應用程序開始時)。
我通過將 dbContext 的生命周期從作用域更改為瞬態解決了這個問題。 我真的因此而改變了什么? 每次我使用 dbContext 時,應用程序會與數據庫連接和斷開連接嗎? 如果沒有,還有其他問題嗎?

IHostedServiceBackgroundServicesingletons 此外,默認情況下 DBContext(當您運行AddDbContext時)是scoped服務。 因此,在每個托管服務中,您需要使用IServiceScopeFactory打開一個 scope 。 像這樣:

using var scope = _scopeFactory.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>;

關於您將其注冊為transient時發生了什么變化的問題。 每次注入和調用 DBContext 時,它都會實例化一個新的 DbContext。 在服務范圍內,在one scope期間,如果您要多次調用 DBContext,您將獲得相同的 DBContext 實例,這將提高性能,所以也許這就是您需要的?

暫無
暫無

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

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