【Database】Entity Framework 無法多執行續存取

開發程式遇到奇怪的問題,批次程式中設定了多組排程,當不同排程同時使用Entity Framework 做Query,會出現錯誤訊息以下:
System.Data.Entity.Core.EntityException: The underlying provider failed on Open. --->
 System.InvalidOperationException: The connection was not closed. The connection's current state is connecting.

原因是系統對於DBContext 的依賴注入設定為: SingleInstance 單一實體。
故當不同執行續同時進行資料庫操作,基於資料安全、完整性,EntityFramework 不允許平行查詢。
此為正確、正常的行為。

目前看到大家的解決方案都是:在需要用到context 的時候,使用using 關鍵字,如以下:

using (ApplicationContext context = new ApplicationContext ())
{
    context.Connection.Open();
    // to something...
}

也因為使用依賴注入DBContext,故此處的解法也很簡單,將註冊改為InstancePerDependency (每次注入新實體) 即可。
但本次事件最需要探討的問題應該是: 依賴注入時的Instance 該如何設定,將成為之後探討的議題。

References:
https://stackoverflow.com/questions/2475008/mssql-error-the-underlying-provider-failed-on-open
https://www.tabsoverspaces.com/230902-multithreading-with-entity-framework/
https://dotblogs.com.tw/yc421206/2015/05/03/151200#%E5%81%9C%E7%94%A8EF%E5%85%A7%E5%BB%BA%E6%AA%A2%E6%9F%A5
https://www.huanlintalk.com/2012/12/entity-framework-dbcontext-lifetime-in.html
https://blog.miniasp.com/post/2009/03/02/Entity-Framework-Quick-Start-and-Leaning-Resources.aspx