【发布时间】:2014-11-22 08:57:18
【问题描述】:
当我使用单个上下文向 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 为这个查询创建一个到数据库的新连接,在这种情况下是四次:
27.09.2014 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
27.09.2014 16:27:54 [SQL]:在 27.09.2014 16:27:54 +04:00 关闭连接
27.09.2014 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].[city] AS [city ], [Extent1].[unit_type_id] AS [unit_type_id] FROM [dbo].[Units] 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
27.09.2014 16:27:54 [SQL]:在 27.09.2014 16:27:54 +04:00 关闭连接
等等……
有什么方法可以控制 EF dbcontext 连接和/或强制它打开单个连接直到被释放或被告知关闭它?
【问题讨论】:
-
你在使用连接池吗?
-
默认情况下。但我需要将所有请求都放在一个连接中,因为实际上最多有不少于 15 个请求。
标签: c# asp.net-mvc entity-framework