我用
  if ((tran.Connection != null) && (tran.Connection.State != ConnectionState.Closed))
            {
                tran.Connection.Close();
                tran.Connection.Dispose();
            }关闭连接 后,  连接还在
using( DbConnection con = db.CreateConnection())
{}
才能真正关闭连接,  这是为什么

解决方案 »

  1.   

    你哪里看出来:关闭连接 后,  连接还在 ?你后面不是重新创建的连接吗??
    db.CreateConnection()
      

  2.   

    我说的是2种写法 第一种关闭后 ,连接还在。  db.CreateConnection() 表示的是第二种写法为什么不能真正的关闭?已经做了  tran。commit 了 , 为什么呢?
      

  3.   

    首先
    DbConnection    这个是数据库连接
    DbTransaction    这个是事务。DbConnection 有没有关闭,看属性state
      

  4.   

    两种写法操作的是同一个连接,这点你要明白。
    第一种写法,你调用close所以连接关闭了,但只是关闭了,对象还在。
    第二种写法,你使用了using,using块结束时会隐式调用Dispose,所以连接不存在了。
    第一种写法要连接不存就得手动调用Dispose。
    这下说得够明白了吧。
      

  5.   

    我说的是 "数据库的连接还在保持,还是连接处于使用状态" 这种状态,  所以才会引起连接池用完这句   tran.Connection.Dispose();     不是关闭的DbConnection ?
      

  6.   

    tran.Connection.Close();
    tran.Connection.Dispose();
    的确是关闭和释放事务指向的链接。
    不过你的tran和DbContext是指向同一个链接吗?
      

  7.   

    tran.Connection.Close();
    tran.Connection.Dispose();
    的确是关闭和释放事务指向的链接。
    不过你的tran和DbContext是指向同一个链接吗?
    我能确定是同一个连接