當我使用單個上下文向SQL發出多個請求時,EF會爲每個請求打開新連接。例如,下面的代碼從數據庫抓幾個列表:實體框架爲每個請求打開新連接
using(MyContext nctx = new MyContext())
{
var dictAllSelects = new Dictionary<string, SelectList>(){
{"sl_task_id", new SelectList(nctx.Tasks.ToArray(), "id", "name")},
{"sl_task_item_id", new SelectList(nctx.TaskItems.ToArray(), "id", "name")},
{"sl_unit_id", new SelectList(nctx.Units.ToArray(), "id", "name")},
{"sl_unit_type_id", new SelectList(nctx.UnitTypes.ToArray(), "id", "name")}
};
}
EF創建與數據庫的新連接爲此每人查詢,也就是在這種情況下的四倍:
2014年9月27日16: 27:54 [SQL]:打開連接27.09.2014 16:27:54 +04:00
27.09.2014 16:27:54 [SQL]:SELECT [Extent1]。[id] AS [id] ,[Extent1]。[name] AS [name],[Extent1]。[task_id] AS [task_id] FROM [dbo]。[TaskItems] AS [Extent1]
27.09.2014 16:27:54 [SQL]: - 在27.09.2014執行16:27:54 +04:00
27.09.2014 16:27:54 [SQL]: - 已完成0毫秒結果:SqlDataReader的
2014年9月27日16時27分54秒[SQL]:00
2014年9月27日16時27分54秒[:在2014年9月27日16時27分54秒04關閉的連接SQL]:打開連接27.09.2014 16:27:54 +04:00
27.09.2014 16:27:54 [SQL]:SELECT [Extent1]。[id] AS [id],[Extent1] 。[name] AS [name],[Extent1]。[city] AS [city],[Extent1]。[unit_type_id] AS [unit_type_id] FROM [dbo]。[Units] AS [Extent1 ]
2014年9月27日16時27分54秒[SQL]: - 執行在2014年9月27日16時27分54秒04:00
2014年9月27日16時27分54秒[SQL]: - - 完成在0毫秒,結果是:SqlDataReader的
2014年9月27日16時27分54秒[SQL]:在2014年9月27日16時27分54秒關閉的連接+04:00
等等
有什麼辦法來控制EF dbcontext連接和/或強制它打開單個連接,直到dis擺出或直到被告知關閉它?
您使用連接池嗎? – Mairaj 2014-09-27 13:04:17
默認情況下。但是我需要將所有請求都放在一個連接中,因爲實際上最多隻有15個請求。 – 2014-09-27 13:18:37