第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何利用 ASP.NET Core LifeCycle 中的 DbContext 池?

如何利用 ASP.NET Core LifeCycle 中的 DbContext 池?

C#
紅糖糍粑 2022-11-21 15:36:43
我有一個對象是每組用戶來管理內(nèi)存中的并發(fā)更改。以固定的速度,比如每六秒,我獲取更改的當(dāng)前狀態(tài)并將其應(yīng)用于數(shù)據(jù)庫。重要的部分是有一個單獨(dú)的線程需要 ASP.NET Core MVC LifeCycle 之外的 dbcontext 實(shí)例。這使它變得困難,或者我不知道如何利用 indecency injection。有沒有辦法在這個問題空間中利用 AddDbContextPool。似乎沒有直接租用 AppDbContext 的方法,Microsoft 警告不要直接創(chuàng)建 AppDbContext,因?yàn)樗?API 可能會發(fā)生變化。據(jù)我所知,我沒有辦法將我的數(shù)據(jù)庫上下文注入/租用到正在執(zhí)行工作的線程中。我正在使用 Reactive API 處理線程,我在其中創(chuàng)建了一個 Subjects 并使用了 Sample 管道,如下例所示:UpdateSubject    .Sample(TimeSpan.FromSeconds(6))    .Subscribe(x => {        // This is where I'd like to take         // advantage of the dbcontext pooling        using(AppDbContext db = new AppDbContext){            // ...            // Iterate Over Changes            // ...            db.SaveChanges();        }   });我目前的感知選項是。什么都不做:架構(gòu)已經(jīng)在整合呼叫。實(shí)施我自己的池并研究如何為每次使用重置上下文,自己使用/實(shí)現(xiàn) Microsoft 的內(nèi)部類 DbContextPool 盡管有警告它嚴(yán)格用于內(nèi)部使用并且 API 可能會更改在我的用例中找到一種方法使其脫離 ASP.NET Core MVC 生命周期而不改變其功能,即 IE,找到一種利用依賴注入的方法。*接受建議
查看完整描述

1 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個贊

問這個問題幫助我回答了我自己的問題,或者找到了解決方案。下面的所有內(nèi)容都使用在請求之外運(yùn)行的線程進(jìn)行了測試。


原來我們可以通過 API 注入服務(wù)提供者來創(chuàng)建我們自己的實(shí)例!


ReadOnly IServiceProvider _ServiceProvider;


MySingulation(IServiceProvider serviceProvider)

{

    _ServiceProvider = serviceProvider;

}

一旦我們通過注入獲得了 IServiceProvider 的句柄,我們就可以使用 MVC 核心 API 來創(chuàng)建上下文實(shí)例


using(var serviceScope = _ServiceProvider.CreateScope())

{

    // Don't get confused -- Call GetService from the serviceScope and 

    // not directly from the member variable _ServiceProvider. 

    var context = serviceScope.ServiceProvider.GetService<YourAppDbContext>();


    // ...

    // Make use of the dbcontext

    // ...


}

現(xiàn)在,重要的是要記住我們首先在 Startup.cs 中使用了 MVC 核心池。


public void ConfigureServices(IServiceCollection services)

{

    //...

    services.AddDbContextPool<YourAppDbContext>(options => {

        options.UseSqlServer(settings.Connection);

    });


    // Oh, it's important the singultion was created within Core's LifeCycle/API

    services.AddSingleton<MySingulation>();

    //...

}   


查看完整回答
反對 回復(fù) 2022-11-21
  • 1 回答
  • 0 關(guān)注
  • 90 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號