La risposta seguente si riferisce a Database-First o Model-First flusso di lavoro (gli unici due flussi di lavoro che erano disponibili con Entity Framework (versione < = 4.0) quando la domanda è stata posta). Se si utilizza il flusso di lavoro Code-First (disponibile dalla versione EF> = 4.1) passare a ssmith answer a questa domanda per una soluzione corretta.
Il file edmx ha nella definizione <ConceptualModel>
e <EntityContainer>
un attributo per pigri carico dove è possibile impostare lazy loading in generale su false:
<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
Questo crea la seguente impostazione nel costruttore ObjectContext:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}
Il mio esempio non è inteso in questo modo il ObjectContext
generato (o DbContext
nelle nuove versioni EF) dovrebbe essere modificato manualmente (che verrebbe sovrascritto da ogni aggiornamento del modello dal database, come indicato da Ctorx) ma che l'elemento nella sezione edmx:ConceptualModels
del file EDMX debba essere modificato aggiungendo l'attributo annotation:LazyLoadingEnabled="false"
- manualmente in un editor XML o nella pagina delle proprietà della superficie del designer dove è disponibile anche questa opzione. Questa modifica del file EDMX genererà automaticamente la classe di contesto con l'opzione di caricamento lazy disabilitato nel costruttore, come mostrato sopra. La stessa modifica del file EDMX non viene sovrascritta quando il modello viene aggiornato dal database.
Perfetto, grazie. –
Ciò richiede di modificare il codice generato, che verrà sovrascritto se si modifica il modello. Prendi in considerazione la possibilità di collocare ObjectContextFactory e apportare le modifiche in fabbrica. In questo modo continuerai a impostare l'opzione solo una volta e non cambierai il codice generato automaticamente. – ctorx
@ctorx - AFAICT, un'opzione più semplice rispetto alla fabbrica sarebbe implementare solo l'OnContextCreated parziale per disattivare il caricamento lento? O mi sta sfuggendo qualcosa? –