0

In meiner Anwendung versuche ich Repository-Muster mit this ASP.NET guide, aber ohne generische Repository und Arbeitseinheit zu verwenden.MVC Repository Pattern - Entsorgen mehrerer Repositories?

Die Sache, die mich betrifft, ist zu entsorgen. Im Moment verfügt meine Anwendung die DbContext durch den Standard Dispose() Controller-Methode:

LibraryContext db = new LibraryContext(); 
// 
... 
// 
protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     db.Dispose(); 
    } 
    base.Dispose(disposing); 
} 

Aber wie mehrere Repositories zu entsorgen? Zum Beispiel habe ich drei von ihnen: bookRepository, userRepository und collectionRepository. Sollte ich sie dann alle in der Methode entsorgen, wie:

protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     bookRepository.Dispose(); 
     userRepository.Dispose(); 
     collectionRepository.Dispose(); 
    } 
    base.Dispose(disposing); 
} 

Ist das ein richtiger Ansatz? Vielen Dank für die Antworten.

+0

entsorgen verwenden u Unity –

+0

Nein, Ich verwende keine Unity. – Dandry

Antwort

0

Sie können ein Basis-Repository erstellen, das um die anderen erweitert wird. Im ctor des Basisrepositorys können Sie die DbContext-Klasse initialisieren, und wenn Sie disponieren möchten, können Sie base.Dispose aufrufen. Es sollte wie folgt sein:

public class BaseRepository<T> where T : BaseEntityWithId, new() 
{ 
    //Represent the context of the database. 
    public DbContext myContext { get; set; } 

    //Represent a virtual table of the database. 
    protected IDbSet<T> DbSet { get; set; } 

    //Represents base constructor of the base repository. 
    public BaseRepository() 
    { 
     this.myContext = new Context(); 
     this.DbSet = this.Context.Set<T>(); 
    } 

    public IObjectContextAdapter GetObjectContextAdapter() 
    { 
     return (IObjectContextAdapter)this.Context; 
    } 

    public virtual void Dispose() 
    { 
     if (this.Context != null) 
     { 
      this.Context.Dispose(); 
     } 
    } 
} 

Wenn Sie wirklich nicht wollen, Basis-Repository auch für eine Methode Dispose() erstellen, sollten Sie sie 1 von 1.

+0

er hat immer noch das selbe problem, er muss 3 mal dispose.base aufrufen! –

+0

Ja, aber er fragt "ist das ein richtiger Ansatz" und meine Antwort ist nein, ist es nicht. Es wird funktionieren, aber er überspringt wichtige Muster und Best Practices. –