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

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

Dbcontext 注冊為“范圍”或“瞬態(tài)”是否會影響關(guān)閉數(shù)據(jù)庫連接

Dbcontext 注冊為“范圍”或“瞬態(tài)”是否會影響關(guān)閉數(shù)據(jù)庫連接

C#
呼喚遠方 2023-09-24 15:49:07
我對 ASP.NET MVC 中的 DI 有基本的了解,但是有一個問題很困擾我。將 Dbcontext 注冊為“作用域”或“瞬態(tài)”有什么區(qū)別嗎?下面是一個典型的 mvc 應用程序的一些代碼:public class EmployeeController : Controller{    private EmployeeContext _context;    public EmployeeController(EmployeeContext context)    {        _context = context;    }    public ActionResult Index()    {        return View(context.Employees.ToList());    }        ...//other action methods that access context's DbSet}假設(shè)我們注冊EmployeeContext為臨時服務。運行應用程序后,應用程序?qū)陕犎魏蝹魅氲恼埱蟆<僭O(shè)發(fā)生了對默認 /Home/Index 的 http 請求,因此EmployeeController 需要創(chuàng)建一個新實例。EmployeeContextDI首先會向控制器的構(gòu)造函數(shù)提供一個實例。_context也適用于所有其他操作方法,并且沒有任何其他地方需要創(chuàng)建新EmployeeContext服務。所以請求完成后,也會_context被處理掉。這和作用域服務不是一樣的效果嗎?我們打算將其注冊為“瞬態(tài)”服務,最終它的工作方式就像“范圍內(nèi)”服務??磥砦覀儗?Dbcontext 注冊為“作用域”或“瞬態(tài)”并不重要。
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經(jīng)驗 獲得超5個贊

如果您不使用任何其他注入服務(這些服務也使用您的 DBContext),那么作用域服務和瞬態(tài)服務之間沒有區(qū)別。


但是,如果您使用其他注入服務,并且 DBContext 上有“瞬態(tài)”,則每個服務都會獲得自己的實例。為了避免這種情況,您應該始終在 DBContext 上使用“scoped”。


在具有以下代碼的示例中,對于“瞬態(tài)”EmployeeContext,每個請求都會有兩個實例:


public class MyService : IMyService 

{

 public MyService(EmployeeContext context)

 {

  // ...

 }

}


public class EmployeeController : Controller

{

    private EmployeeContext _context;

    private _myService;


    public EmployeeController(EmployeeContext context, IMyService myService)

    {

        _context = context;

        _myService = myService;

    }


    public ActionResult Index()

    {

        return View(context.Employees.ToList());

    }


    ...//other action methods that access context's DbSet

}


查看完整回答
反對 回復 2023-09-24
?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

從官方文檔來看,DBContext被設(shè)計為短暫且非線程安全的。如果 DBContext 實例處理得當,它們不會導致并發(fā)問題。通常,底層并發(fā)問題應該來自 SQL TCP 連接池。創(chuàng)建多少個 DBContext 實例對于并發(fā)問題并不重要。但它確實在堆中創(chuàng)建對象,這意味著如果您可以完全控制代碼流并保證不會出現(xiàn)任何線程安全問題,則應該限制 DBContext 對象的創(chuàng)建。但根據(jù)我的理解,不應在請求線程之間共享實例,因為這會導致線程安全問題的損壞。

查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關(guān)注
  • 170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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