Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Datenbankdatensätze mit LinqToSql zurückgeben?

Im Fall der Ausführung einer einfachen Abfrage ist dies möglich funktionieren so (natürlich ist es möglich) - jedoch im Fall der Abfrage einer nackten Table<T> , es könnte sei, dass alles zuerst gepuffert wird; Sie könnten vielleicht versuchen, die Anzahl während der Iteration abzufragen oder eine Ablaufverfolgung auszuführen. In diesem Fall vermute ich es wird zuerst gepuffert.

Re closed:das hängt auch;p davon ab, ob jemand foreach verwendet , dann ja:seit foreach verwirft den Iterator explizit über finally . Jedoch! Es ist nicht garantiert, wenn jemand zum Beispiel (sehr frech und lasch):

var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
    Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad

Da der Iterator dann nicht a:entsorgt wird, b:sich selbst erschöpft und c:nicht abstürzt, wird er nicht richtig heruntergefahren (eine dieser 3 Bedingungen wird richtig schließen). Betonung:Dies ist ein pathologischer Fall:Normalerweise ist es einigermaßen sicher zu sagen "es wird geschlossen, ja".

Wenn Sie garantiertes Non-Buffering wollen, beachten Sie, dass "dapper" das hat, wenn Sie buffered setzen auf false :

IEnumerable<Customer> customers = connection.Query<Customer>(
       "select * from Customer", buffered: false);

(es kann auch mit den Parametern usw. umgehen)