亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Dbcontext 注冊為“范圍”或“瞬態”是否會影響關閉數據庫連接

Dbcontext 注冊為“范圍”或“瞬態”是否會影響關閉數據庫連接

C#
呼喚遠方 2023-09-24 15:49:07
我對 ASP.NET MVC 中的 DI 有基本的了解,但是有一個問題很困擾我。將 Dbcontext 注冊為“作用域”或“瞬態”有什么區別嗎?下面是一個典型的 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}假設我們注冊EmployeeContext為臨時服務。運行應用程序后,應用程序將偵聽任何傳入的請求。假設發生了對默認 /Home/Index 的 http 請求,因此EmployeeController 需要創建一個新實例。EmployeeContextDI首先會向控制器的構造函數提供一個實例。_context也適用于所有其他操作方法,并且沒有任何其他地方需要創建新EmployeeContext服務。所以請求完成后,也會_context被處理掉。這和作用域服務不是一樣的效果嗎?我們打算將其注冊為“瞬態”服務,最終它的工作方式就像“范圍內”服務??磥砦覀儗?Dbcontext 注冊為“作用域”或“瞬態”并不重要。
查看完整描述

2 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

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


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


在具有以下代碼的示例中,對于“瞬態”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條經驗 獲得超6個贊

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

查看完整回答
反對 回復 2023-09-24
  • 2 回答
  • 0 關注
  • 155 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號