2016-04-21 5 views
1

Ich bin mit EF 6.1 mit Visual Studio 2013. Ich habe eine Ansicht ModellLINQ-Abfrage benutzerdefiniertes best practice in EF Objekt 6.1

public class SaprePartsViewModel 
{ 
    public long ItemID { get; set; } 
    public string ItemCode { get; set; } 
    public string ItemName { get; set; } 
} 

Und hat auch Datenbanktabelle SapreParts mit gleichen Spaltennamen.

ich diese zwei Verfahren getan haben Brauch zu holen Objekte

i.

var sqlQueryList = db.Database.SqlQuery<SaprePartsViewModel>(
    "select ItemID,ItemCode,ItemName from SpareParts").ToList(); 

ii.

Beide Abfrage funktioniert gut.Aber meine Frage ist welche zu verwenden? Welche ist optimal für die Leistung?

+1

Ich denke, Leistung ist so ein schwieriges Thema, da es so viele Metriken gibt. Für die einfache Abfrage oben, ist die offensichtliche Antwort, die EF-Konvention zu verwenden, wie Sie intellisense kostenlos erhalten, und macht Tests ein Kinderspiel. Statische Strings nach der SQL-Abfrage werden im Laufe der Zeit brechen und der Körper der Abfrage kann auch im Laufe der Zeit ändern, so haben Sie ein bewegliches Ziel mit der Option i - für #ii gehen, es sei denn, Sie haben messbare Probleme –

+0

beide Autos auf der Rennstrecke zu finden welches bewegt sich schneller –

+0

ShekharPankaj - Leistung geht es nicht nur um Geschwindigkeit (imho). es geht auch um die Klarheit des Zwecks und die Leichtigkeit der Wartung. Es gibt ein altes Sprichwort hier in Schottland * mehr Eile, weniger Geschwindigkeit *. Kurz gesagt, balancieren Sie die Implikationen aus, wenn Sie sich einige Millisekunden von einer Abfrage rasieren, den Arbeitscode aus der Tür bekommen und leicht gewartet werden. –

Antwort

4

[wie pro meine Kommentare auf OP]

Ich denke, die Leistung so ein schwieriges Thema ist festzunageln, da es so viele Metriken beteiligt sind. Für die einfache Abfrage oben ist die offensichtliche Antwort, die EF-Konvention zu verwenden, wie Sie intellisense kostenlos erhalten, und macht Tests ein Kinderspiel.

Statische Strings nach der SQL-Abfrage werden im Laufe der Zeit (schlecht, schlecht, schlecht !!) und der Körper der Abfrage kann sich auch im Laufe der Zeit (schlechter, schlechter, schlechter) ändern, so dass Sie ein bewegliches Ziel mit haben Option I - Gehen Sie für ii, es sei denn, Sie haben messbare Probleme.

Nebenbei, Leistung ist nicht nur Geschwindigkeit (imho), es geht auch um Klarheit der Zweck und Wartungsfreundlichkeit. Es gibt ein altes Sprichwort hier in Schottland mehr Eile, weniger Geschwindigkeit. Kurz gesagt, balancieren Sie die Implikationen aus, wenn Sie sich ein paar Millisekunden von einer Anfrage abschrecken lassen, anstatt Arbeitscode aus der Tür zu bekommen und leicht zu warten. Ihr Team wird es Ihnen danken (wie auch Sie selbst im Laufe der Zeit)

+0

Diese LINQ sagt ein anderes Wort http://blog.codinghorror.com/compiled-or-bust/ –

+1

Wenn Sie im Detail lesen, sagt Jeff Folgendes: * Lassen Sie uns die Mathematik tun, auch wenn ich es saugen. Jede nicht kompilierte Ausführung der Abfrage dauerte weniger als ein Drittel einer Millisekunde länger. * - Das bedeutet also, dass Sie im Durchschnitt 1/3 Millisekunde sparen, indem Wartbarkeit, Lesbarkeit und Testbarkeit der Verwendung von linq-Abfragen beeinträchtigt werden. Ihr Anruf :) –