2012-12-04 5 views
5

Nella funzione seguente, dopo context.SaveChanges(), l'entità PropertyType è sempre nullo. Ho appena convertito da ObjectContext a DBContext (con il database prima) e prima del cambiamento, ha funzionato bene e ora non funziona. C'è qualcosa che mi manca?Caricamento lento non funzionante dopo SaveChanges Entity Framework

Controllo il PropertyTypeID, è scritto correttamente ed esiste nel db. Tutte le relazioni sono impostate correttamente nel file db ed edmx. I file .tt generati mostrano l'oggetto PropertyType come virtuale. Questo è EF 5.

Ecco il codice (assegnazioni non importanti proprietà delle entità è stato rimosso):

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; 
    } 

Grazie in anticipo.

EDIT

Ho scoperto che se aggiungo questa riga di codice dopo SaveChanges(), funziona. Tuttavia, questo non è l'ideale, come posso farlo caricare l'entità di default?

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

Grazie ancora.

risposta

12

È necessario creare un proxy invece di utilizzare new al fine di consentire il caricamento pigro per lavorare:

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

Questo risolto il mio problema. Tuttavia, facendo ciò richiede che l'entità sia creata dopo che il contesto è stato istanziato. Pertanto, sarebbe meglio per me caricare manualmente il riferimento come mostrato nella mia modifica. Grazie per l'aiuto! – Ricketts