我正在使用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是否会使用与数据库相同的真实连接,或者连接池是否将此抽象出来?
答案 0 :(得分:0)
经过一些测试后,无论您是否继续使用相同的连接,它似乎都是不确定的。很多时候你会这样,但有时你似乎没有。可能与并发相关。最终,假设它含糊不清并且会改变,这可能是最安全的。