Frage

Bei der Verwendung von Entity Framework, tut ESQL besser als Linq to Entities?

Ich würde es vorziehen, verwenden Sie Linq to Entities (vor allem wegen der starken Typprüfung), aber einige meiner anderen team-Mitglieder sind unter Berufung auf die Leistung als Grund für die Verwendung von ESQL.Ich möchte, um eine vollständige Vorstellung von den pro 's/con' s, entweder die Methode.

War es hilfreich?

Lösung

Die offensichtlichsten Unterschiede sind:

Linq to Entities ist stark typisiert code einschließlich der schönen abfrageausdrucksyntax.Die Tatsache, dass das "von" kommt vor dem "select" ermöglicht IntelliSense, um zu helfen Sie.

Entity SQL verwendet die traditionellen string-basierte Abfragen mit eine vertraute SQL-ähnliche syntax, wo der SELECT-Anweisung kommt vor dem AUS.Da eSQL ist string-basierte, dynamische Abfragen kann aus in traditioneller Weise zur Laufzeit mit string-manipulation.

Weniger offensichtlich entscheidende Unterschied ist:

Linq to Entities ermöglicht Sie zu ändern die Form oder das "Projekt" die Ergebnisse Ihrer Suchanfrage in irgendeiner Form benötigen Sie mit dem “select new{...}" syntax.Anonyme Typen, neu in C# 3.0, dies erlaubt.

Projektion ist nicht möglich, mit Entity SQL, wie Sie muss immer wieder eine ObjectQuery<T>.In einigen Szenarien ist es möglich, verwenden Sie ObjectQuery<object> aber Sie müssen zusammenarbeiten, um die Tatsache, dass .Wählen Sie immer zurück ObjectQuery<DbDataRecord>.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 andere subtile Unterschiede beschrieben von einem der team-Mitglieder im detail hier und hier.

Andere Tipps

ESQL generieren können auch einige besonders bösartige sql.Ich hatte zu verfolgen, die ein problem mit so einer Abfrage, mit vererbten Klassen, und ich fand heraus, dass mein pidly-little ESQL 4 Linien wurde übersetzt in ein 100000 Zeichen, monster SQL statetement.

Hat die gleiche Sache mit Linq und der kompilierte code war viel mehr diese, sagen wir mal 20 Zeilen SQL.

Plus, was andere Leute erwähnt, Linq ist stark, auch wenn sehr ärgerlich zu Debuggen, ohne die "Bearbeiten und fortfahren" - Funktion.

AD

Entity SQL (eSQL) können Sie Dinge tun, wie das dynamische Abfragen leichter als LINQ to Entities.Allerdings, wenn Sie nicht haben ein Szenario, das erfordert, eSQL, ich würde zögern, zu verlassen sich auf es über LINQ, weil es viel schwieriger zu pflegen (z.B.nicht mehr compile-time checking, etc).

Ich glaube, dass LINQ können Sie vorkompilieren Abfragen, die geben könnte Sie eine bessere Leistung.Rico Mariani darüber gebloggt LINQ-performance eine Weile zurück und beschreibt kompilierte Abfragen.

nettes Diagramm für performance-Vergleiche hier: Entity Framework Performance Erforscht nicht viel Unterschied gesehen zwischen ESQL und Einrichtungen aber insgesamt erhebliche Unterschiede in der Verwendung von Entitäten über direkte Abfragen

Entity Framework verwendet zwei Schichten von Objekt-mapping (im Vergleich zu einer einzigen Schicht in LINQ to SQL), und der zusätzliche mapping-performance Kosten.Zumindest in der EF version 1, Anwendung Designern wählen sollten, Entity Framework nur dann, wenn die Modellierung und ORM-mapping-Fähigkeiten rechtfertigen kann, dass die Kosten.

Je mehr code Sie können die Abdeckung mit compile-time-Prüfung ist für mich etwas, dass ich Platz eine höhere Prämie als die Leistung.Having said, dass in diesem Stadium würde ich wahrscheinlich neigen ESQL nicht nur wegen der Leistung, sondern es ist auch (zur Zeit) viel flexibler, was es tun kann.Es gibt nichts Schlimmeres, als mit einem Technologie-stack, der nicht über eine Funktion, die Sie wirklich brauchen.

Das entity framework nicht unterstützt Dinge wie benutzerdefinierte Eigenschaften benutzerdefinierte Abfragen (wenn Sie brauchen wirklich optimieren der Leistung) und nicht dieselbe Funktion wie in linq-to-sql (d.h.es gibt features, die einfach nicht in entity framework).

Mein persönlicher Eindruck von Entity Framework ist, dass es eine Menge potential, aber es ist wahrscheinlich ein bisschen zu "hart" in der Umsetzung für die Verwendung in einer Produktionsumgebung, in seinem aktuellen Zustand.

Für direkte Anfragen bin ich unter Verwendung von linq to entities, für dynamische Abfragen bin ich mit ESQL.Vielleicht ist die Antwort ist nicht entweder/oder, sondern, und/auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top