Wie viele andere versuche ich, die beste Leistung aus meiner Anwendung herauszuholen und gleichzeitig den Code so einfach und lesbar wie möglich zu halten. Ich verwende Linq-to-SQL und versuche wirklich, meine Datenschicht so deklarativ wie möglich zu halten.
Ich gehe davon aus, dass SQL-Aufrufe die teuersten Operationen sind. Daher versuche ich, sie quantitativ zu minimieren, aber verrückte komplexe Abfragen zu vermeiden, die schwer zu optimieren sind.
Ein Beispiel: Ich verwende DataLoadOptions mit meinem DataContext - sein Ziel ist es, die Anzahl der Abfragen zu minimieren, indem verwandte Entitäten vorgeladen werden. (Aka, eager loading vs. lazy loading.)
Problem: Linq verwendet Joins, um das Ziel zu erreichen. Wie bei allem, ist es ein Kompromiss. Ich erhalte weniger Abfragen, aber diese verbundenen Abfragen sind komplexer und teurer. Ein Blick in den SQL Profiler macht dies deutlich.
Ich hätte also gerne eine Option in Linq, um Vorspannung ohne Fugen . Ist das möglich? So könnte es aussehen:
J'ai un Persons
Tabelle, eine Items
Tabelle, und eine PersonItems
Tabelle, um eine Viele-zu-Viele-Beziehung herzustellen. Wenn ich eine Sammlung von Personen lade, möchte ich auch alle ihre PersonItems und Items eagerly geladen haben.
Linq macht dies derzeit mit einer großen Abfrage, die zwei Joins enthält. Mir wäre es lieber, wenn es drei Abfragen ohne Joins machen würde: eine für Personen, eine für alle PersonItems, die mit diesen Personen zusammenhängen, und eine für alle Items, die mit diesen PersonItems zusammenhängen. Dann würde Linq sie automatisch in die entsprechenden Entitäten einordnen.
Jede dieser Abfragen wäre eine schnelle Abfrage nach Art eines Feuerschlauchs. Langfristig würde dies eine vorhersehbare Leistung im Web ermöglichen.
Haben Sie das schon einmal gesehen?