Entity Framework 5
-
Hallo
Zeige eine Tabelle aus der Datenbank in einer Liste an. Diese Tabelle hat nun viele Referenzen zu anderen Tabellen.
Nun möchte ich nur die Tabelle laden nicht die Referenzen zu den anderen Tabellen.
Dazu habe ich LazyLoading ausgeschaltet.Nun möchte ich wenn man einen Eintrag aus der Liste auswählt und nen Button drückt, alle Daten (also auch alle Referenzen zu anderen Tabellen) zu diesem Eintrag aus der Datenbank lädt.
Wie das geht weiß ich nicht. In EF4 gabs noch ein Load(). Das ich bei EF5 vermisse.
Besser noch es gäbe was wo ich sagen kann Lade mir alles zugehörige. Bei Load von EF4 muss man ja alles einzeln angeben.
Hoffe ihr könnt mir weiterhelfen.
-
KrimiMimi schrieb:
...
Ein wenig Code könnte hier weiterhelfen, gerade weil EF viele Ansätze parallel unterstützt.
Über Linq gibt es z.B. die Include-Anweisung um Referenzen aufzulösen (verwende ich in Zusammenhang mit dem Code First-Ansatz). Zudem gibt es wohl noch einen Graphen-Basierten Ansatz, den ich aber noch nie verwendet habe.
-
Jo den Include Befehl habe ich nun auch gefunden.
Nun muss ich aber alle Tabellen die ich nachladen will einzeln angeben.Ein IncludeAll gibt es wohl nicht.
-
Hier mal ein bischen Code und gleich noch ne Frage dazu
var house = DbContext.houses .Where(h => h.ID == houseId) .Include(h => h.rooms) .SingleOrDefault();
Jetzt lade ich zur Haustabelle alle zugehörigen Räume. Wie lade ich aber nun zum Raum alle zugehörigen Möbel.
Dachte so:
var house = DbContext.houses .Where(h => h.ID == houseId) .Include(h => h.rooms.AsQueryable().Inlcude(r => r.furniture)) .SingleOrDefault();
Da aber rooms in houses nicht vom typ dbSet<> ist sondern von ICollection<> ist.
geht das nicht. Erhalte eine Exception:"The Include path expression must refer to a navigation property defined on the type"
Hierzu eine Lösung?
-
KrimiMimi schrieb:
var house = DbContext.houses .Where(h => h.ID == houseId) .Include(h => h.rooms.AsQueryable().Inlcude(r => r.furniture)) .SingleOrDefault();
Bitte die Codetags für C# verwenden.
Probiere mal das folgende aus (ohne Gewähr):
var house = DbContext.houses .Where(h => h.ID == houseId) .Include(h => h.rooms.furniture) .SingleOrDefault();
-
Ja das geht ja gar nicht. Denn rooms hat ja kein Property furniture.
rooms ist die Collection. Nur room hat eine Property furniture.
-
Wenn ich es richtig verstehe, was hier beschrieben ist, müsste es wie folgt gehen:
var house = DbContext.houses .Where(h => h.ID == houseId) .Include(h => h.rooms.Select(r => r.furniture)) .SingleOrDefault();
-
Oh super. Das hatte ich irgendwie nicht gefunden. Danke.
Aber so was wie IncludeAll oder LoadAll gibt es nicht oder?