4 Stimmen

Wie entsorge ich richtig einen Linq to SQL DataContext in einem Repository?

In einer ASP.NET MVC-Anwendung im Rob Conery-Stil haben Sie in der Regel ein Repository:

public class CustomerRepository
{
    DataContext dc = new DataContext();

    public IQueryable AllCustomers()
    {
        return db.Customers;
    }

    public Customer GetCustomer(int customerID)
    {
        return db.Customers.FirstOrDefault(c => c.CustomerID = customerID);
    }
}

Und einen Controller:

public class CustomerController: Controller
{
    CustomerRepository _repository;

    public ActionResult Index()
    {
        var data = _repository.AllCustomers();
        return view("Index", data);
    }

    public ActionResult Details(int id)
    {
        var data = _repository.GetCustomer(id);
        if (data !=null)
            return view("Details", data);
        else
            return view("NotFound");
    }
}

Der Controller wird durch eine Controller-Fabrik im ASP.NET MVC Kern-Engine instanziiert, wenn eine Anforderung über die Routing-Engine an ihn geroutet wird. Dann führt er die entsprechende Methode im Controller aus.

Angenommen, ich möchte `IDisposable` in DataContext implementieren, wie entsorgt man DataContext richtig, ohne den DataContext für jede Methode im Repository neu instanziieren zu müssen?

4voto

mcintyre321 Punkte 12488

Machen Sie das Repository einmalig und entsorgen Sie den Datenkontext in seiner Dispose-Methode.

Falls Sie sich fragen, wer das Repository entsorgt, Rob würde wahrscheinlich einen IOC-Container verwenden, der das Repository in den Controller mit einer Instanz pro Anfrage injizieren würde und das Repository am Ende der Anfrage automatisch entsorgen würde.

1voto

Andrey Punkte 57704

Eigentlich ist DataContext IDisposable. Sie sollten jeden Controller-Aufruf in using(CustomerRepository _repository = new CustomerRepository()) { ... } einfügen und IDisposable im Repository implementieren, indem Sie einfach ds.Dispose() aufrufen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X