Domanda

Qual è il miglior modello di vita per a DataContext?Dovrei semplicemente crearne uno nuovo ogni volta che ne ho bisogno (ovvero, a livello di funzione), dovrei mantenerne uno disponibile in ogni classe che lo utilizzerebbe (livello di classe), o dovrei creare una classe statica con un DataContext statico (app-domain livello)?Esistono buone pratiche considerate a riguardo?

È stato utile?

Soluzione

È praticamente necessario mantenere lo stesso contesto di dati disponibile per tutta la durata delle operazioni che si desidera eseguire se si intendono archiviare modifiche che devono essere .SubmitChanges()più tardi, altrimenti perderai quelle modifiche.

Se stai semplicemente interrogando delle cose, va bene crearle secondo necessità, ma se lo desideri in seguito .SubmitChanges() dovrai rifattorizzare molto il tuo codice, quindi potresti anche adottare il modello per mantenere efficacemente il file datacontext globale in tutta la tua app fin dall'inizio.

Tieni presente che il contesto dei dati è disconnesso.La connessione viene stabilita solo quando i dati della query sono enumerato (non quando esegui la query per la prima volta, è un tipo di dati "pigro", quindi fornisce i dati solo quando sono necessari), e quindi chiuso immediatamente dopo.SU .SubmitChanges() la connessione viene aperta per inviare le modifiche e poi chiusa subito dopo.Quindi non pensare di mantenere il datacontext around mantiene aperta una connessione, non lo fa (puoi agganciare il StateChange evento della connessione per confermarlo tu stesso, ecco come ne sono sicuro).

C'è un ottimo articolo su Il blog di Rick Strahl che tratta questo argomento in modo approfondito, molto più di quanto fornisce la mia risposta qui!!

Altri suggerimenti

Penso che Jeff Atwood ne abbia parlato nel Podcast del codice Herding, quando gli fu chiesto esattamente la stessa cosa.Ascoltatelo verso gli ultimi 15-20 minuti circa.

Penso che in SO il contesto dati venga creato nella classe Controller.Non sono sicuro di molti dettagli qui.Ma questo è quello che sembrava.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top