当实体框架重复打开/关闭连接时,它是否与实际连接相同?

时间:2013-01-17 22:06:51

标签: sql-server entity-framework entity-framework-4

我正在使用Entity Framework 4.x.当使用Context的单个实例在单个业务操作中重复查询数据库时,我知道Entity Framework将为每个查询打开和关闭数据库连接。但我的问题是,所有三个查询(同样,Context的相同实例)的连接是否与数据库的连接相同?或者它会从连接池中获取另一个连接(可能是中毒连接)?

示例1:

var conn = (SqlConnection) ((EntityConnection) Context.Connection).StoreConnection;
conn.Open();
var A = new SqlCommand("exec SProcA", conn).ExecuteNonQuery();
conn.Close();
Thread.Sleep(100);
conn.Open();
var B = new SqlCommand("exec SProcB", conn).ExecuteNonQuery();
conn.Close();
Thread.Sleep(100);
conn.Open();
var C = new SqlCommand("exec SProcC", conn).ExecuteNonQuery();
conn.Close();

示例2:

// Let Entity Framework manage my connections for me automagically.
var A = Context.TableA.First();
var B = Context.TableB.First();
var C = Context.TableC.First();

在这些情况下,A,B和C是否会使用与数据库相同的真实连接,或者连接池是否将此抽象出来?

1 个答案:

答案 0 :(得分:0)

经过一些测试后,无论您是否继续使用相同的连接,它似乎都是不确定的。很多时候你会这样,但有时你似乎没有。可能与并发相关。最终,假设它含糊不清并且会改变,这可能是最安全的。