2016-05-30 8 views
2

Werden alle Datensätze in diesem Code geladen oder wird etwas wie SqlDataReader verwendet?Dapper Query (..): Stream oder lädt alle?

using (var c = new SqlConnection(_options.TargetConnectionString)) 
{ 
    c.Open(); 
    foreach(var record in c.Query("select * from Users")) // suppose N+1 records 
    { 
     // all records loaded or read one by one here? 
     // some work here... 
    } 
} 
+0

Verwenden Sie SQL Server Profiler, um dies zu untersuchen. Aber anscheinend sind alle Datensätze in Ihrem Fall geladen. – Vladimir

Antwort

4

Beide Optionen werden unterstützt. Standardmäßig werden die Daten in einem List<T> auf der Grundlage gespeichert, dass die meisten Abfragen ziemlich klein sind, und die Beschränkung "mehrere Re-Cord-Sets" zu vermeiden. Um die zugrunde liegende Liste ohne zusätzliche Zuweisung zu erhalten, verwenden Sie die angegebene Erweiterungsmethode .AsList(). Wenn Sie jedoch ungepufferte Daten wünschen: übergeben Sie buffered: false. Dies gibt Ihnen einen Enumerator, der die rohe IDataReader umschließt - geeignet für große Anfragen.

+0

Ich sehe. Eine weitere gute Antwort auf http://StackOverflow.com/Questions/13026558/Explanation-of-Dapper-Buffer-Cache – Artyom

+1

@Artyom Ich würde diesem Kerl nicht vertrauen - er ist ein kompletter Idiot –

+0

Ja) Seine Antwort ist zwar detaillierter) – Artyom