Ich habe eine Lösung, bei der ich Self-Tracking-Entitäten mithilfe der RTM-Vorlagen erstellt habe. Ich habe die Entitäten und den Kontext zwischen zwei Projekten aufgeteilt, damit ich die Typdefinitionen wiederverwenden kann, wenn ich Client / Server über WCF ausführen möchte.
Eine meiner Servicemethoden ist erforderlich, um ein Diagramm von "Produkt" -Objekten mit untergeordneten Objekten von "ProductSku" zurückzugeben, und diese wiederum haben untergeordnete Objekte von "ProductPrice". Die Auswahlkriterien lauten auf die Eigenschaft "Name" des Objekts "Produkt" und die Eigenschaft "FinancialPeriodID" des "ProductPriceObject". Momentan schließe ich den Namen nicht in die Suche ein, aber ich habe Probleme, den Graphen zurückzubringen.
Wenn ich einfach die folgende Abfrage ausführe (beachten Sie, dass diese Syntax aus LinqPad und nicht aus dem eigentlichen Anwendungscode stammt) ...
%Vor%... dann kann ich das vollständige Objektdiagramm für die Elemente abrufen, die ich benötige, natürlich gibt es an dieser Stelle keinen Filter.
Wenn ich stattdessen den Filter wie folgt einführe ...
%Vor%... was ich zurückbekomme, sind die "Produkt" -Objekte, die untergeordneten "ProductSku" -Objekte (die in der "Skus" -Kollektion des "Produkts" sind) und ihre "ProductPrice" -Objekte (die in der "PriceHistory" Sammlung des "ProductSku") - aber ich bekomme nur die "Product" Objekte zurück, die "Skus" Sammlung ist leer.
Ich habe auch versucht, die Abfrage als ...
zu codieren %Vor%... aber das macht auch keinen Unterschied.
Natürlich muss ich etwas falsch machen. Kann irgendjemand etwas Licht auf das, was dieses Etwas ist, werfen, so wie ich es schon seit Stunden getan habe und jetzt im Kreis herumlaufe?
Vielleicht kann Projektion diesen Trick?
Sehen Sie sich die Linq-Filtersammlung mit EF
anBearbeiten:
Was ist mit:
%Vor% Include
führt bereits alle notwendigen Aufgaben aus, um die Navigationseigenschaften zu füllen, so dass zusätzliche Joins für die Bedingung nicht benötigt werden. Was noch wichtiger ist, jede manuelle Verknüpfung oder Projektion ändert die Form der Abfrage und Include
wird nicht verwendet.
Achten Sie auch darauf, dass die Bedingung nur Produkte filtert. Die von Include geladenen Daten werden nicht gefiltert. Sie erhalten alle Produkte mit mindestens einem SKU mit einer Preishistorie mit der ID 244 für die finanzielle Periode, aber bei diesen Produkten werden alle Skus- und Preishistorien geladen. EF unterstützt derzeit nicht das Filtern nach Include. Wenn Sie auch gefilterte Beziehungen benötigen, müssen Sie separate Abfragen ausführen, um sie zu erhalten.
Das Einschließen ist keine Garantie für das eifrige Laden und es könnte aus dem folgenden Grund stillschweigend ignoriert werden. Es ist besser in diesem Thread erklärt. Sie können die Tabelle, die Sie laden möchten, manuell auswählen, z. B.
%Vor%Self-Tracking-Entities sind nicht zum verzögerten Laden aktiviert. Aus diesem Grund ist die Sammlung nicht leer mit der Standard-Entity-Generierung und nicht mit STE. Tatsächlich lädt Ihr Include niemals verbundene Entitäten, wenn Sie sie in der Abfrage verwenden. Jetzt ist Ihre L2E-Abfrage nicht korrekt. Ich denke, dass du so etwas tun willst:
%Vor%Ich hoffe, das hilft
Matthieu
Tags und Links .net sql-server linq entity-framework-4 ado.net