none
Error al borrar una entidad con EF

    Pregunta

  • Bueno, estoy en un proyecto de asp.net mvc 3 con c#. Uso Entity Framework.

    Tengo un metodo para borrar un elemento "A", al cual le paso el Id al metodo. El elemento "A" puede tener varios elementos "B". Asi que en la base de datos la tabla "B" tiene la clave foranea hacia el elemento "A". Para borrar el elemento "A" primero tengo que borrar todos los elementos "B" que contenga.

    Lo que hago es traer el elemento "A" que quiero borrar por el Id. En un foreach borro todos los elementos "B" que contiene. Y despues borro el elemento "A".

    Los elementos "B" los borra sin problemas, pero cuando quiero borrar el elemento "A" tengo la siguiente excepcion: "Store, update or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded".

    Aca no tengo ni idea que puede ser, ya que en otros metodos hago cosas parecidas y no he tenido este problema.

    Gracias desde ya.

    lunes, 17 de diciembre de 2012 13:01

Respuestas

  • Ya lo solucione, el problema tenia un foreach donde llamaba a el metodo para borrar los elementos "B", pero en ese metodo declaraba una nueva UnitOfWork, es decir, tenia un contexto nuevo. Y cuando regresaba para eliminar el elemento "A" el contexto original no sabia que habia eliminado los elementos "B" del elemento "A".

    La solucion fue pasar por parametro la "UnitOfWork" al metodo que borraba el elemento "B" en vez de declarar uno nuevo. Tambien podria haber puesto parte de su codigo en el foreach, pero pasar por parametro la unidad de trabajo me parecio mejor.

    • Marcado como respuesta dario83 miércoles, 19 de diciembre de 2012 20:03
    miércoles, 19 de diciembre de 2012 20:02

Todas las respuestas

  • ¿Puedes pegar el código para ver cómo lo haces?

    Con esto podremos analizar lo que sucede


    @XaviPaper
    http://geeks.ms/blogs/xavipaper

    lunes, 17 de diciembre de 2012 22:54
  • Ya lo solucione, el problema tenia un foreach donde llamaba a el metodo para borrar los elementos "B", pero en ese metodo declaraba una nueva UnitOfWork, es decir, tenia un contexto nuevo. Y cuando regresaba para eliminar el elemento "A" el contexto original no sabia que habia eliminado los elementos "B" del elemento "A".

    La solucion fue pasar por parametro la "UnitOfWork" al metodo que borraba el elemento "B" en vez de declarar uno nuevo. Tambien podria haber puesto parte de su codigo en el foreach, pero pasar por parametro la unidad de trabajo me parecio mejor.

    • Marcado como respuesta dario83 miércoles, 19 de diciembre de 2012 20:03
    miércoles, 19 de diciembre de 2012 20:02