Essendo nuovo per Entity Framework, sono davvero piuttosto bloccato su come procedere con questo insieme di problemi. Sul progetto al quale sto lavorando attualmente, l'intero sito è fortemente integrato con il modello EF. Inizialmente, l'accesso al contesto EF veniva controllato mediante un bootstrapper di Dependency Injection. Per ragioni operative non siamo stati in grado di utilizzare una libreria DI. Ho rimosso questo e ho usato un modello di singole istanze dell'oggetto contesto dove richiesto. Ho iniziato ad ottenere la seguente eccezione:.NET Entity Framework e transazioni
Il tipo "XXX" è stato mappato più di una volta.
Siamo giunti alla conclusione che le diverse istanze del contesto stavano causando questo problema. Ho quindi astratto l'oggetto contesto in una singola istanza statica a cui si accedeva da ciascun thread/pagina. Ora sto ricevendo una delle diverse eccezioni sulle transazioni:
Nuova transazione non consentita perché ci sono altri thread in esecuzione nella sessione.
L'operazione di transazione non può essere eseguita perché ci sono richieste in sospeso che funzionano su questa transazione.
ExecuteReader richiede il comando per eseguire una transazione quando la connessione assegnata al comando si trova in una transazione locale in sospeso. La proprietà Transaction del comando non è stata inizializzata.
L'ultima di queste eccezioni si è verificata in un'operazione di caricamento. Non stavo cercando di salvare lo stato del contesto sul Db sul thread che non funzionava. C'era un altro thread che eseguiva un'operazione del genere comunque.
Queste eccezioni sono intermittenti nella migliore delle ipotesi, ma sono riuscito a far entrare il sito in uno stato in cui le nuove connessioni sono state rifiutate a causa di un blocco delle transazioni. Purtroppo non riesco a trovare i dettagli delle eccezioni.
Credo che la mia prima domanda sia, se il modello EF dovesse essere utilizzato da una singola istanza statica? Inoltre, è possibile rimuovere la necessità di transazioni in EF? Ho provato con un oggetto TransactionScope
senza successo ...
Per essere onesti io sono molto bloccato qui, e non riesco a capire il motivo per cui (quello che dovrebbe essere) operazioni piuttosto semplici stanno causando una questione ...
Correlato: http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why – Steven
È un peccato non poter utilizzare un bootstrap IOC, perché la soluzione con [Ninject] (http : //www.ninject.org/) sarebbe quello di associare un'istanza "comune" allo scope _request_, come altri hanno suggerito: 'kernel.Bind>(). > () .InRequestScope(); '- la parte importante è **' InRequestScope' ** –
drzaus