3 Stimmen

BLToolkit mit Linq -- Warum ist eine `using`-Anweisung erforderlich?

Angesichts der jüngsten (extremen) Performance-Probleme mit SubSonic 3 wollen wir ORMs migrieren und vorzugsweise so wenig Code wie möglich neu schreiben (der größtenteils aus Linq besteht).

Ich schaue mir also BLToolkit an. Einer der Hauptunterschiede, den ich zwischen SubSonic und BLToolkit sehe, ist, dass BLToolkit immer eine using Erklärung. Zum Beispiel:

static void SingleTableTest()
{
    using (var db = new NorthwindDB()) //This
    {
        var query =
            from e in db.Employee
            where e.EmployeeID > 5
            orderby e.LastName, e.FirstName
            select e;

        foreach (var employee in query)
        {
            Console.WriteLine("{0} {1}, {2}", employee.EmployeeID, employee.LastName, employee.FirstName);
        }
    }
}

Was genau wird damit erreicht? Wenn Sie eine neue Instanz der Datenbank erstellen, wird dann eine neue Verbindung erstellt? Wäre es sinnvoll, dies in eine statische Klasse zu "verpacken", so dass ich von überall aus Folgendes tun könnte var q=from e in Database.Employee ... ? Welche Auswirkungen hätte dies im Zusammenhang mit einer Webanwendung?

4voto

IT. Punkte 824

Ich vermute, die NorthwindDB-Klasse in Ihrem Beispiel basiert auf DbManager. DbManager ist ein Wrapper um Connection und verhält sich wie eine Verbindung. Sie sollten eine andere Klasse ausprobieren - DataContext. Sie ist genau für Ihr Szenario konzipiert.

0voto

Tridus Punkte 4961

Ich kenne BLToolkit nicht, aber aus Ihrem Kommentar, der sagte, dass Sie wissen wollten, ob es möglich war, nur ein Objekt pro HTTP-Anfrage zu verwenden, mit etwas wie Entity Framework können Sie. Anstelle einer using-Anweisung erstellen Sie ein db-Objekt im Application_BeginRequest-Ereignis von global.asax. Sie entsorgen es in Application_EndRequest. Sie können das Objekt in HttpContext.Current.Items speichern, was eine praktische Auflistung pro Anfrage ist.

Wie gesagt, ich weiß nicht, ob das speziell auf BLToolkit zutrifft, weil ich mich damit nicht auskenne, aber hoffentlich reicht es aus, um Ihnen die richtige Richtung zu weisen :)

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