Keine Notwendigkeit zu entsorgen DataContext - /ObjectContext-in EF?
Albahari schreibt in "c# 4.0 in a nutshell":
>
Obwohl DataContext - /ObjectContext IDisposable implementieren, können Sie (im Allgemeinen)
Weg, ohne Entsorgung Instanzen. Entsorgung zwingt den Kontext der Verbindung
entsorgen—aber dies ist in der Regel unnötig, da L2S und EF-verbindungen schließen
automatisch, wenn Sie fertig Abruf der Ergebnisse aus einer Abfrage
<<
Dieser fühlt sich falsch an und FxCop auch beschwert, wenn Sie nicht diposing etwas, das IDisposable.
Habe ich die folgenden repository-code:
public abstract class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{ ...
public void Add(TEntity entity)
{
using (var dbContext = this.UnityContainer.Resolve<DbContext>())
{
dbContext.Set<TEntity>().Add(entity);
dbContext.SaveChanges();
}
}
...
public virtual IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> expression)
{
using (var dbContext = this.UnityContainer.Resolve<DbContext>())
{
return dbContext.Set<TEntity>().Where(expression).ToList().AsEnumerable();
}
}
...
Hinweis: ich nicht zurück, das IQueryable - lazy loading sollten Sie nicht eine Rolle spielen.
Beheben DbContext ist so konfiguriert, wie PerResolveLifetimeManager.
Ist dieser Ansatz OK, oder muss ich das überdenken dieser basiert auf Albaharis Beschreibung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie immer anrufen, entsorgen wenn die Klasse macht es. Die Aussage behauptet, dass EF und L2S Verbindung schließen, wenn Sie fertig Einsatz - ich weiß, die Aussage ist richtig, aber in der gleichen Zeit ADO.NET team auch schließt die Verbindung in
Dispose
Methode, so dass vielleicht gibt es Situationen, wenn die Verbindung nicht geschlossen.Dispose
wennDispose
hat nichts von Interesse, undDispose
nicht aktualisiert werden auch in Zukunft alles zu tun, von Interesse. Ich kann nicht sagen, ob einObjectContext
'sDispose
tut oder tun kann, etwas sinnvolles, also habe ich keine Antwort auf die Frage, aber ich bin nicht einverstanden mit der Argumentation in dir. "also vielleicht gibt es Situationen, wenn die Verbindung nicht geschlossen" -- nicht, wenn Sie es Recht.Task
im .NET 4 muss noch entsorgt werden, aber in .NET 4.5 ist es nicht notwendig, aber um die Kompatibilität mit vorhandenen code (durch inplace-upgrade .NETTO 4 bis 4,5) es noch machtDispose
Methode. Das ist sehr spezifische situation.Arbeite ich auf das EF 4.0 ObjectContext (ja, ich weiß...). Ich landete Blick auf den code in DotPeek und der dispose-nur-Nullen der Referenz auf die Verbindung und ein paar andere Dinge in der ObjectContext-Klasse.
Wenn eine Verbindung erstellt wird (auch durch DotPeek) gibt die vorhandene Instanz. Wenn der connection-string geändert wird, wird es aktualisieren Sie die Verbindungszeichenfolge für alle Instanzen.
Dass war mein nehmen auf Sie mindestens. Müssen, tiefer zu schauen, aber auf den ersten Blick scheint es, dass Sie mit ihm Weg erhalten.