Saltar al contenido

No se puede acceder a un objeto desechado. Una causa común de este error es desechar un contexto

Hola usuario de nuestro sitio web, descubrimos la solución a lo que estabas buscando, desplázate y la obtendrás más abajo.

Solución:

Esto se debe al tipo de devolución de su método async void. En general, cuando se utiliza async void en tu código son malas noticias, porque:

  • No puedes esperar a que se complete
  • Cualquier excepción no controlada terminará su proceso (¡ay!)

Así que regresa async Task en vez de async void de su método de la siguiente manera:

public async Task OnGet(int id)

    Book = await _db.Books.SingleOrDefaultAsync(x => x.Id == id);

    if(Book == null)
    
       RedirectToPage("Index");
    

Para más detalles:

  • C#: cuidado con la sincronización void en tu código

  • No se puede acceder a un objeto desechado en ASP.NET Core al inyectar DbContext

Lo que voy a publicar NO es la respuesta a esta pregunta en particular. Pero está relacionado, así que solo para ahorrarle dolor de cabeza a alguien, lo estoy publicando. Estaba encontrando este mismo error.

System.ObjectDisposedException: no se puede acceder a un objeto desechado. etc.

El siguiente era el código con el error (¿puedes verlo?):

[HttpGet("processs/oxxo-spei/ticket-email/paymentIdx")]
public StatusCodeResult ProcessOxxoSpeiTicketEmailAsync(string paymentIdx)

    var paymentId = paymentIdx.DecodeRef();
            
    var response = _orderEngine.ProcessOxxoSpeiTicketEmailAsync(paymentId);

    return StatusCode(200);

El siguiente cambio lo arregló:

[HttpGet("processs/oxxo-spei/ticket-email/paymentIdx")]
public async Task ProcessOxxoSpeiTicketEmailAsync(string paymentIdx)

    var paymentId = paymentIdx.DecodeRef();
            
    var response = await _orderEngine.ProcessOxxoSpeiTicketEmailAsync(paymentId);
                // ^^^^I HAD FORGOTTEN TO PUT AWAIT
    return StatusCode(200);

Sí, es cierto, había olvidado poner “aguardar” antes de una función que usaba un contexto de base de datos de EF Core. Agregar ‘esperar’ lo arregló. Es tan fácil perdérselo, especialmente si está cansado y no ha cumplido la fecha límite.

valoraciones y reseñas

Finalizando este artículo puedes encontrar las referencias de otros gestores de proyectos, tú de igual forma tienes la habilidad mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *