Leistung von Linq to Entities gegen ESQL

entity-framework entity-sql linq-to-entities

Frage

Wenn das Entity Framework verwendet wird, ist ESQL besser als Linq für Entitäten?

Ich würde es vorziehen, Linq für Entitäten zu verwenden (hauptsächlich aufgrund der Überprüfung auf starke Typen), aber einige meiner anderen Teammitglieder nennen Leistung als Grund, ESQL zu verwenden. Ich möchte eine vollständige Vorstellung von den Vor- / Nachteilen der beiden Methoden erhalten.

Akzeptierte Antwort

Die offensichtlichsten Unterschiede sind:

Bei Linq to Entities handelt es sich um stark typisierten Code einschließlich einer schönen Abfrageverständnissyntax. Die Tatsache, dass das "von" vor der "Auswahl" kommt, ermöglicht es IntelliSense, Ihnen zu helfen.

Entity SQL verwendet herkömmliche auf Zeichenfolgen basierende Abfragen mit einer bekannteren SQL-ähnlichen Syntax, bei der die SELECT-Anweisung vor dem FROM steht. Da eSQL auf Zeichenketten basiert, können dynamische Abfragen zur Laufzeit auf herkömmliche Weise mithilfe von Zeichenfolgenmanipulation erstellt werden.

Der weniger offensichtliche Hauptunterschied ist:

Mit Linq to Entities können Sie die Form ändern oder die Ergebnisse Ihrer Abfrage in jede gewünschte Form "projizieren", indem Sie die neue Syntax "{...}" wählen. Anonyme Typen, neu in C # 3.0, haben dies zugelassen.

Mit Entity SQL ist keine Projektion möglich, da immer eine ObjectQuery <T> zurückgegeben werden muss. In einigen Szenarien kann ObjectQuery <object> verwendet werden. Sie müssen jedoch die Tatsache umgehen, dass .Select immer ObjectQuery <DbDataRecord> zurückgibt. Siehe Code unten ...

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

Es gibt noch kleinere Unterschiede, die von einem Teammitglied hier und hier detailliert beschrieben werden .


Beliebte Antwort

ESQL kann auch einige besonders schädliche SQL erzeugen. Ich musste ein Problem mit einer solchen Abfrage verfolgen, bei der vererbte Klassen verwendet wurden, und ich fand heraus, dass mein aus 4 Zeilen bestehendes ESQL in einer 100000-Zeichen-Monster-SQL-Anweisung übersetzt wurde.

Hatte dasselbe mit Linq und der kompilierte Code war viel einfacher zu handhaben, sagen wir 20 Zeilen SQL.

Was andere Leute erwähnt, Linq ist stark typisiert, obwohl es sehr ärgerlich ist, ohne die Funktion zum Bearbeiten und Fortfahren zu debuggen.

ANZEIGE



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum