Linq-to-SQL EntitySet ist nicht IQueryable - irgendwelche Problemumgehungen?

8

Wenn Sie eine EntitySet-Eigenschaft für ein Modellobjekt in Linq-to-SQL abfragen, werden alle Zeilen aus dem Entitätsset zurückgegeben und weitere clientseitige Abfragen durchgeführt.

Dies wird an einigen Stellen online bestätigt und ich habe das Verhalten selbst beobachtet. Das EntitySet implementiert IQueryable nicht.

Was ich tun musste, ist Code wie:

umzuwandeln %Vor%

zu:

%Vor%

Kennt jemand eine bessere Lösung?

Eine zweite Frage: Wird dies im Entity Framework behoben?

    
Pete 02.03.2011, 20:59
quelle

2 Antworten

5

Ein EntitySet ist nur eine Sammlung von Entitäten. Es implementiert IEnumerable, nicht IQueryable. Das Active Record-Muster gibt an, dass Entitäten direkt für ihre eigene Persistenz verantwortlich sind. OR-Mapper-Entitäten haben keine direkten Kenntnisse über die Persistenzschicht. OR Mapper übertragen diese Verantwortung zusammen mit den Verantwortlichkeiten für die Arbeitseinheit und die Identitätskarte in den Datenkontext. Wenn Sie also die Datenquelle abfragen müssen, müssen Sie den Kontext (oder ein Table-Objekt) verwenden. Um dies zu ändern, würden die verwendeten Muster verbogen.

    
mikesigs 23.03.2011 00:17
quelle
0

Ich hatte ein ähnliches Problem: Wie kann ich das machen? WählenSie können einen Beitritt verwenden . Nachdem ich eine ganze Weile mit LINQPad herumgespielt habe, habe ich eine gute Lösung gefunden. Der Schlüssel ist, das EntitySet, das Sie gerade betrachten, in eine SelectMany, Select, Where, etc. zu drücken. Sobald es drin ist, wird es zu einem Ausdruck und der Provider kann daraus eine richtige Abfrage machen. p>

Versuchen Sie dies anhand Ihres Beispiels:

%Vor%

Ich kann diese Abfrage nicht zu 100% überprüfen, da ich den Rest Ihres Modells nicht kenne. Die ersten beiden Zeilen der Abfrage führen jedoch dazu, dass der Rest zu einem Ausdruck wird, der vom Anbieter in eine Verknüpfung umgewandelt wird. Dies funktioniert mit meinem eigenen Beispiel, das in der oben verlinkten Frage steht.

    
David 07.07.2011 15:56
quelle

Tags und Links