Laden...

Lazy Loading

Erstellt von stefan123 vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.192 Views
S
stefan123 Themenstarter:in
107 Beiträge seit 2009
vor 13 Jahren
Lazy Loading

MSSQL 2008 mit EF4

Hallo Leute

Wenn ich Lazy Loading aktiviere

Solten doch bei einer Linq-Abfrage alle Untertabellen erscheinen mit Resultat.

tbl_person
tbl_packete


 var query = from c in ppentities.tbl_person
                        select c;


Bei mir erscheinen nur die Personen hat da jemand eine Idee?

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Wenn ich Lazy Loading aktiviere

Solten doch bei einer Linq-Abfrage alle Untertabellen erscheinen mit Resultat.

Lazy Loading heißt dass die Daten nur dann geladen werden wenn diese auch benötigt werden. In deiner Query gehts nur um Personen und selbst diese werden nicht unmittelbar geladen (warum das so ist habe ich gerade hier erklären versucht).

Die "Untertabellen" werden dann geladen wenn du über das Person-Objket darauf zugreifst - nicht vorher.

Zur Theorie hinter Lazy Loading ist Lazy Load aus Martin Fowlers PoEAA ganz interessant.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

F
240 Beiträge seit 2006
vor 13 Jahren

Das, was du erreichen willst, ist das genaue Gegenteil von Lazy Loading - Eager Loading, d.h. alle Daten werden bereits beim Abfragen und nicht erst beim Iterieren geladen. Dafür musst du Lazy Loading natürlich aus machen.

S
stefan123 Themenstarter:in
107 Beiträge seit 2009
vor 13 Jahren

Hallo Leute

Habe das Lazy Loading deaktiviert

doch es sind keine Daten Vorhanden?

Die Relationen bestehen

hmmm?

2.891 Beiträge seit 2004
vor 13 Jahren

Dafür musst du Lazy Loading natürlich aus machen.

Naja, jein. Beim EF heißt deaktiviertes LazyLoading, dass jegliche Relation manuell geladen werden muss. Durch Deaktivieren von Lazy Loading wird das Problem nicht gelöst (eher noch durch Aktivieren). Mit der ObjectQuery(T).Include-Methode (System.Data.Objects) kann spezifiziert werden, was alles geladen wird.

Allerdings macht mich die Frage etwas stutzig:

tbl_person, tbl_packete
var query = from c in ppentities.tbl_person select c;
Bei mir erscheinen nur die Personen [...] Solten doch bei einer Linq-Abfrage alle Untertabellen erscheinen mit Resultat.

Mir scheint, dass query sämtliche Personen und Pakete enthalten soll (aber nur Personen enthält). Falls dem so ist: Ja, query enthält nur Personen. Genau so, wie die LINQ-Abfrage es auch definiert.
Also bitte nochmal genau erklären, was gewünscht wird.

Gruß,
dN!3L

S
stefan123 Themenstarter:in
107 Beiträge seit 2009
vor 13 Jahren

Hallo

Wie bring ich denn das hin?
Wenn ich die tbl_person aufrufe das da alle relationen mit geladen werden.

var query = from c in ppentities.tbl_person select c;

Da finde ich kein include mittels tbl_person

Ich benutze eind wcf dataservice

2.891 Beiträge seit 2004
vor 13 Jahren

Sorry, aber das bleibt weiterhin nur Rätselraten mit dem derzeitigen Informationsstand.
Bitte etwas ausführlicher beschreiben, was du vorhast. Was ist tbl_person? Welche Relationen gibt es? wie sind die wo definiert? Was hat es mit dem WCF-DataService auf sich?

Wenn du willst, dass dir geholfen wird, dann musst du auch dafür sorgen, dass wir dir helfen können...

D
615 Beiträge seit 2009
vor 13 Jahren

hallo stefan123

var query = from c in ppentities.tbl_person.Include("tbl_packete")
                        select c; 

...genau wie dN!3L erklärte...

Beste Grüsse

Diräkt

S
stefan123 Themenstarter:in
107 Beiträge seit 2009
vor 13 Jahren

Hallo ich erstelle aktuell eine Silverlight-App meine Daten holle ich über eine wcf dataservice daruntern befindet sich das ef4 mit den gemappten tabellen von der datenbank.

Es sollte doch nun möglich sein, wenn ich mittels linq die daten von der tbl_person aufrufe auch die daten der tbl_packete geladen werden.

tbl_person 1 zu n tbl_packete diese relation ist auf dem ef4 so definiert

auf dem view habe ich eine combobox darin sind die personen enthalten die und ich möchte mittels selchange die details der packete anzeigen lasen.

D
615 Beiträge seit 2009
vor 13 Jahren

Hallo Stefan123

Ich habe das so gemacht :

SL Projekt & Entity Framework & RIA Services

Da musste man in den MetaDaten folgendes anpassen :

            [Include]
            public aspnet_Roles aspnet_Roles { get; set; }

und im WebServices sowas anfügen :

 ... var query = (from x in this.ObjectContext.Content.Include("aspnet_Users") ....

Ev. hilft dir da das ja 😉

Beste Grüsse

Diräkt

S
stefan123 Themenstarter:in
107 Beiträge seit 2009
vor 13 Jahren

Soo Leute hab die Lösung für mein Problem gefunden

Der Zauberbegriff lautet

tbl_person.expand("tbl_packete")

ganz einfach

Danke für eure hilfe