当我使用单个上下文向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