2013-09-05 31 views
5

Po migracji z EF4 do EF5. Użyłem poniższego kodu z poprzednią wersją, aby uzyskać powiązaną jednostkę nowo dodanego przedmiotu.Właściwość nawigacji zwraca wartość null po wstawieniu

Student s = new Student(); 
s.Name = _name; 
s.ClassID = _cID; 

db.Students.Add(s); 
db.SaveChanges(); 

ClassRoom c = s.ClassRoom; 

więc użyłem, aby uzyskać konkretny podmiot klasy do c. Ale teraz s.ClassRoom zwraca wartość null.

Jak uzyskać podmiot ClassRoom dla ucznia? Czy muszę używać db.ClassRooms.FirstOrDefault(....)?

Odpowiedz

8

Problem polega na tym, że jeszcze nie załadowano właściwości nawigacji.

Można użyć:

db.Students.Include("ClassRoom") 

lub

using System.Data.Entity; 
db.Students.Include(s=>s.ClassRoom) 

do niecierpliwością załadować właściwość nav

druga opcja jest umożliwienie leniwy załadunku poprzez oznaczenie właściwości nawigacji z wirtualnym. Osobiście wolę pierwsze (chętne ładowanie), ponieważ zachęca ono do bardziej wydajnego kodu.

także sprawdzić moje właściwości nawigacyjnych artykuł tutaj, mówię o załadunku blisko początku http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

Twój kod powinien brzmieć następująco:

Student s = new Student(); 
s.Name = _name; 
s.ClassID = _cID; 

db.Students.Add(s); 
db.SaveChanges(); 

//reload the entity from the DB with its associated nav property 
s = db.Students.Include(s=>s.ClassRoom).Single(st=>st.StudentId == s.StudentId); 
ClassRoom c = s.ClassRoom; 
+0

Czy wprowadzono EF5? –

+1

@LibinTK Wydaje mi się, że istnieje od początku EF. –

+0

@OndrejJanacek Tak .. Widziałem to już wcześniej. Ale działało to nawet bez 'db.Students.Include (" ClassRooms ")' –

Powiązane problemy