13

Sto seguendo prima l'approccio del database; Ho creato le tabelle nel mio database SQL Server 2008, quindi mappo tali tabelle alle classi Entity Framework utilizzando un modello di dati Entity ADO.NET. Ma quando ho aperto il file designer.cs ho trovato il seguente codice nella definizione di classe che è stato creato automaticamente:Perché Entity Framework utilizza automaticamente ObjectContext invece di DbContext quando si mappano le tabelle di database utilizzando la datamodel Entity ADO.NET

public partial class PortalEntities : ObjectContext 

così ho seguenti tre domanda che ottenere il mio confuso:

  1. Perché la mia classe PortalEntities deriva da ObjectContext e non da DbContext come mi aspettavo?

  2. C'è una grande differenza tra ObjectContext & DbContext, o sono essenzialmente la stessa e offrono che stesse funzionalità

  3. Quando provo a scrivere la qualcosa di simile al seguente codice:

    Student student = db.Students.Find(id); 
    

Ho scoperto che non è possibile utilizzare il metodo .Find() come facevo prima usando DbContext, quindi ciò significa che ObjectContext & DbContext hanno metodi diversi che posso usare?

BR

risposta

24

Il DbContext è un wrapper per l'ObjectContext che semplifica l'interfaccia per le cose che facciamo più.

Se si dispone di un DbContext è ancora possibile accedere al ObjectContext attraverso ((IObjectContextAdapter)dbContext).ObjectContext;

Se si desidera utilizzare il DbContext al posto del ObjectContext quando si utilizzano database di prima, è possibile cambiare il modello che viene utilizzato per la generazione del codice. Puoi farlo facendo clic con il pulsante destro del mouse su EDMX e selezionando "Aggiungi elemento di generazione codice". È quindi possibile selezionare il modello DbContext.

Here is an example dell'intero processo.

+0

grazie per la vostra risposta; ma trar vantaggio dall'uso di DbContext invece di ObjectContext nel mio database apprach prima? –

+4

DbContext ha un'interfaccia semplificata. Sarà più facile da usare e, se necessario, potrai sempre lanciarlo su un ObjectContext. Anche il DbContext è più facile da deridere per scopi di test unitari. –

+0

Chiara spiegazione! Grazie – GibboK

0

Poiché VS2012 la generazione del codice predefinito è passata da ObjectContext a DbContext.

Problemi correlati