Ich habe viele Projekte mit Repositorys gesehen, von denen Instanzen zurückgegeben werden IQueryable
. Auf diese Weise können zusätzliche Filter und Sortierungen für den IQueryable
von anderen Code ausgeführt werden, wodurch andere SQL-Anweisungen generiert werden. Ich bin gespannt, woher dieses Muster stammt und ob es eine gute Idee ist.
Meine größte Sorge ist, dass IQueryable
es ein Versprechen ist, die Datenbank einige Zeit später zu erreichen, wenn sie aufgelistet wird. Dies bedeutet, dass ein Fehler außerhalb des Repositorys ausgegeben wird. Dies kann bedeuten, dass eine Entity Framework-Ausnahme in einer anderen Ebene der Anwendung ausgelöst wird.
Ich bin in der Vergangenheit auch auf Probleme mit MARS (Multiple Active Result Sets) gestoßen (insbesondere bei der Verwendung von Transaktionen), und dieser Ansatz klingt so, als würde er dazu führen, dass dies häufiger vorkommt.
Ich habe immer AsEnumerable
oder ToArray
am Ende jedes meiner LINQ-Ausdrücke aufgerufen , um sicherzustellen, dass die Datenbank gefunden wurde, bevor der Repository-Code verlassen wurde.
Ich frage mich, ob die Rückgabe IQueryable
als Baustein für eine Datenschicht nützlich sein könnte. Ich habe einen ziemlich extravaganten Code mit einem Repository gesehen, das ein anderes Repository aufruft, um ein noch größeres zu erstellen IQueryable
.
where
Klausel eine Klausel hinzufügen IQueryable
, müssen Sie diese Daten nur drahtlos senden , nicht die gesamte Ergebnismenge.