EF DBContext entsorgen nicht schließen der Verbindung

Ich bin mit dem EF 6.1.0

Habe ich unter benutzerdefinierte DBContex Objekt als DBEntites

public partial class DbEntities : DbContext
{
    public DbEntities()
        : base("name=DbEntities")
    {
        ////Configuration.LazyLoadingEnabled = true;
        ////Configuration.ProxyCreationEnabled = false;
    }

    ////I have ALL Entites added as below
    ////public virtual IDbSet<CCode> CCodes { get; set; }
}

Habe ich die unten angegebenen Operationen auf die Kontext-Objekt

using (var context = new DbEntities())
        {
            var entitySet = context.Set<T>();
            var res = entitySet.Where<T>(predicate).ToList();
            if (context.Database.Connection.State == ConnectionState.Open)
            {
                context.Database.Connection.Close();
            }

            return res;
        }

Aber nach der Entsorgung der Kontext-Objekt, noch kann ich sehen, einen aktiven DB-Verbindung. Auf Verbindung Zustand kann ich sehen, dass die Verbindung bereits geschlossen ist(die Verbindung war nie true).

Ich bin mit der folgenden Abfrage, um zu sehen, die Verbindung auf SQL.

select db_name(dbid) , count(*) 'connections count'
from master..sysprocesses
where spid > 50 and spid != @@spid
group by db_name(dbid)
order by count(*) desc

Unter der unten angegebenen Anweisung eine sql-Verbindung Anzahl erhöht. Aber es war nie down, auch nach der Entsorgung . (Ich meine nach dem using-block excuted es soll um die Verbindung zu schließen).

var res = entitySet.Where<T>(predicate).ToList();

Jegliche Hilfe würde sehr geschätzt werden.

  • Die meisten wahrscheinlich, dass ist, weil Sie das Verbindungs-pooling: öffnen und schließen von verbindungen ist teuer, so .NET hat einige verbindungen und wiederverwendet. msdn.microsoft.com/en-us/library/8xx3tyca(v=vs. 110).aspx
  • Ich hoffe, dass so. aber in meinem Fall bin ich nicht wiederverwenden, das gleiche connection-Objekt.So dass ich t nicht nützlich für mich.
  • Es geht nicht um die Wiederverwendung von connection-Objekt. Wenn Sie " neue Verbindung erstellen mit der gleichen Konfiguration (connection string), wird es nicht wirklich öffnen Sie eine neue Verbindung zur Datenbank, aber die Wiederverwendung von vorhandenen (wenn es eine ist im pool). Gleiche, wenn Sie in enger Verbindung Objekt - zugrunde liegende Verbindung kann nicht geschlossen werden, sondern werden stattdessen in den pool. Da Sie wahrscheinlich die Abfrage der gleichen Datenbank mehr als einmal während der Lebensdauer der Anwendung - das wird hilfreich sein für Sie.
  • Sinn machen. Ich bestätige und markieren Sie als Antwort
  • Sie können überprüfen, dass ich bei der "SqlConnection.ClearPool((SqlConnection) Kontext.Datenbank.Verbindung);" vor der Entsorgung Ihren Kontext. Dann nach dem entsorgen Sie Ihre Verbindung sollte wirklich geschlossen werden.
  • Perfekt. Das ist richtig. Es ist wegen der Bündelung
  • Ich denke, ich konnte Sie nicht markieren Sie als Antwort, bis Sie es post als Antwort

Schreibe einen Kommentar