2012-12-04 28 views
5

W poniższej funkcji, po context.SaveChanges(), właściwość PropertyType ma zawsze wartość NULL. Właśnie przekonwertowałem z ObjectContext na DBContext (najpierw baza danych) i przed zmianą działało dobrze, a teraz nie. Czy jest coś, czego mi brakuje?Lazy Loading nie działa po SaveChanges Entity Framework

Sprawdzam identyfikator PropertyTypeID, który jest poprawnie zapisany i istnieje w bazie danych. Wszystkie relacje są poprawnie skonfigurowane w pliku db i edmx. Wygenerowane pliki .tt pokazują obiekt PropertyType jako wirtualny. To EF 5.

Oto kod (nie ważne zadania właściwości podmiotu została usunięta):

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID) 
    { 
     ListingTransferDetail transfer_detail = new ListingTransferDetail(); 
     transfer_detail.PropertyTypeID = PropertyTypeID; 

     using (IDXEntities context = new IDXEntities()) 
     { 
      context.ListingTransferDetails.Add(transfer_detail); 
      context.SaveChanges(); 
      TransferProgress += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\"."; 
     } 

     return transfer_detail; 
    } 

góry dzięki.

EDIT

I odkryli, że jeśli dodać poniższy wiersz kodu po SaveChanges(), to działa. Jednak nie jest to idealne, jak mogę domyślnie załadować obiekt?

context.Entry(transfer_detail).Reference(a => a.PropertyType).Load(); 

Jeszcze raz dziękuję.

Odpowiedz

12

Musisz utworzyć proxy zamiast korzystania new w celu umożliwienia leniwy załadunku do pracy:

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID) 
{ 
    using (IDXEntities context = new IDXEntities()) 
    { 
     ListingTransferDetail transfer_detail = 
      context.ListingTransferDetails.Create(); 
     transfer_detail.PropertyTypeID = PropertyTypeID; 

     context.ListingTransferDetails.Add(transfer_detail); 
     context.SaveChanges(); 

     //... 

     // the following triggers lazy loading of PropertyType now 
     var something = transfer_detail.PropertyType.SomeProperty; 
    } 

    return transfer_detail; 
} 
+0

to rozwiązać mój problem. Jednak wykonanie tej czynności wymaga utworzenia jednostki po utworzeniu kontekstu. Dlatego lepiej byłoby ręcznie załadować referencję, jak pokazano w mojej edycji. Dzięki za pomoc! – Ricketts

Powiązane problemy