ho un controllore:DbContext è stato eliminato e autofac
private readonly ILogger _logger;
private readonly IRepository _repository;
public HomeController(ILogger logger, IRepository repository)
{
_logger = logger;
_repository = repository;
}
Questo è il repository:
public class EfRepository : IRepository
{
// ...methods for add, delete, update entities
// ....
public void Dispose()
{
if (this._context != null)
{
this._context.SaveChanges();
(this._context as IDisposable).Dispose();
this._context = null;
}
}
}
Infine, tipi di registrazione a CIO:
_builder.RegisterType<Logger>().As<ILogger>();
_builder.RegisterType<EfRepository>().As<IRepository>().WithParameter("context", new PcpContext());
Quando corro l'applicazione ottengo questo errore:
The operation cannot be completed because the DbContext has been disposed.
Ho provato a cambiare EfRepository registrazione in questo modo:
_builder.RegisterType<EfRepository>()
.As<IRepository>()
.WithParameter("context", new PcpContext()).InstancePerLifetimeScope();
In questo caso il primo traguardo richiesta, ma quando si tenta di aprire altre pagine, ottengo di nuovo l'errore. Dov'è il problema?
MAI impegnare il nostro DbContext a disposizione. Dispose verrà chiamato in caso di eccezione, ma non si desidera salvare alcuna modifica quando ciò accade. – Steven
@Steven: ho cancellato questa riga, comunque questo non risolve il problema. – user1260827
Ogni volta che ho visto SaveChanges all'interno di un dispose, il programmatore stava avendo problemi. Im ancora per capire quale modello di progettazione è che suggerisce o raccomanda "commit" o "salva" in Dispose. Sto per suggerire di rivalutare il piano per salvare all'interno di smaltire. Che dire della gestione degli errori. perché si associano le modifiche di "commit" a un database con la garbage collection? Vale la pena leggere http://msdn.microsoft.com/en-us/library/fs2xkftw%28VS.80%29.aspx Quando si avvia lo smaltimento? forse inizia qui: http://stackoverflow.com/questions/898828/c-sharp-finalize-dispose-pattern –