none
Por qué pierdo datos no relacionados al borrar en la base de datos?

    Pregunta

  • Hola,

    Tengo una tabla "ShoppingCategorie" y otra tabla "ShoppingItem" que he relacionado.

    Luego tengo una tabla "ShoppingItemDetail" que se relaciona con "ShoppingItem".

    Mi problema es que cuando borro un "ShoppingItemDetail" pierdo en tiempo de ejecución la relación que tiene el "ShoppingItem" referenciado en el "ShoppingItemDetail" borrado con su "ShoppingCategorie", es decir, se pone a null. Sin embargo, si cierro la aplicación y la vuelvo a abrir esa relación vuelve a estar ahí y puedo acceder a ella sin problemas, por lo que en la base de datos sí está.

    ¿Por qué me puede pasar esto? No he puesto el código de las relaciones por no hacer la pregunta muy extensa, pero no tengo problema en ponerlo si fuese necesario.

    Llevo mucho tiempo atascado en esto y no veo cómo solucionarlo.

    Muchas gracias.

    sábado, 08 de febrero de 2014 11:30

Respuestas

  • Hola Panzher...

    Solo se me ocurre que a causa del borrado,  Linq2Sql esté dejando las relaciones nulas internamente. Si despues del borrado cierras el contexto y lo vuelves a abrir y consultas el dato, sigue a nulo?

    Un saludo


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    domingo, 09 de febrero de 2014 9:25
  • Hola Panzerlhnen,

    Por seguir con lo que decía Yeray que me parece que se refería al Contexto de la base de datos local y no al DataContext de la Vistas. Si pones dentro de un using la operación de borrado seguro que cierras el contexto.

    using (var db = new BaseDatosDataContext(App.DBConnectionString))
                   {
                       
                   }

    Si es que estás usando SQL CE que lo mismo me estoy columpiando.

    Y ya puesto que estás usando como base de datos SQL CE, SQLite?

    Si llevas un tiempo atascado te diría que intentases reproducir el error con una mini aplicación que se comporte igual y nos la hagas llegar para que podamos ver lo que pasa. No creo que mirando las relaciones, que seguramente están bien, seamos capaces de ver lo que pasa.

    Seguramente al tratar de reproducir el error te des cuenta de lo que pasa (ya sé que es un peñazo, pero a mi es lo único que se me ocurre), pero si no es así te podemos intentar echar una mano viendo el problema concreto.

    un saludo

    • Propuesto como respuesta MartinRomaniaMas viernes, 28 de febrero de 2014 16:49
    • Marcado como respuesta PanzerIhnen viernes, 28 de febrero de 2014 20:18
    lunes, 24 de febrero de 2014 23:08

Todas las respuestas

  • Hola Panzher...

    Solo se me ocurre que a causa del borrado,  Linq2Sql esté dejando las relaciones nulas internamente. Si despues del borrado cierras el contexto y lo vuelves a abrir y consultas el dato, sigue a nulo?

    Un saludo


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter

    domingo, 09 de febrero de 2014 9:25
  • Disculpa Josue, pero no sé cómo cerrar el contexto, he probado poniendo esto en la vista:

    this.DataContext = null;
    this.DataContext = App.ViewModel;

    Pero el dato sigue a nulo tras hacerlo. Aunque tampoco estoy seguro de estar haciendo lo que me indicas.

    domingo, 09 de febrero de 2014 11:17
  • Hola :)

    Gracias por visitar el foro. Déjanos saber tus comentarios respecto a la última respuesta. Si la Información que te han proporcionado es capaz de resolver tu consulta, de lo contrario te pido de favor desmarques la respuesta y nos lo hagas saber.

    Saludos,

    Miguel

    MSDN/TechNet Soporte Comunidades

    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.
    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 20 de febrero de 2014 18:19
  • Hola, ya dejé comentarios sobre la última respuesta, y todavía no he conseguido solucionar le problema.

    Un saludo.

    sábado, 22 de febrero de 2014 18:07
  • Hola Panzerlhnen,

    Por seguir con lo que decía Yeray que me parece que se refería al Contexto de la base de datos local y no al DataContext de la Vistas. Si pones dentro de un using la operación de borrado seguro que cierras el contexto.

    using (var db = new BaseDatosDataContext(App.DBConnectionString))
                   {
                       
                   }

    Si es que estás usando SQL CE que lo mismo me estoy columpiando.

    Y ya puesto que estás usando como base de datos SQL CE, SQLite?

    Si llevas un tiempo atascado te diría que intentases reproducir el error con una mini aplicación que se comporte igual y nos la hagas llegar para que podamos ver lo que pasa. No creo que mirando las relaciones, que seguramente están bien, seamos capaces de ver lo que pasa.

    Seguramente al tratar de reproducir el error te des cuenta de lo que pasa (ya sé que es un peñazo, pero a mi es lo único que se me ocurre), pero si no es así te podemos intentar echar una mano viendo el problema concreto.

    un saludo

    • Propuesto como respuesta MartinRomaniaMas viernes, 28 de febrero de 2014 16:49
    • Marcado como respuesta PanzerIhnen viernes, 28 de febrero de 2014 20:18
    lunes, 24 de febrero de 2014 23:08
  • Gracias MartinRomaniaMas,

    Efectivamente haciendo lo que me indicas, y como bien apuntaba Josue Yeray, tengo accesible esa información que parecía desaparecer.

    Ahora mi pregunta sería, ¿Debo hacer eso en cada operación con la base de datos? no parece lo mejor ¿no?, ¿lo hago solo en esta operación en concreto a modo de workaround?, ¿o habrá manera de averiguar qué está pasando?

    Gracias.

    martes, 25 de febrero de 2014 18:49
  • Hola Panzerlhnen,

    Yo lo hago así. En cada método de la clase que maneja las operaciones con la BD uso un using. No se si habrá otra forma mejor de hacerlo. Pero a mi tampoco me parece una mala forma. Si hay alguién que conozca otra manera más elegante que hable ahora ... y asi aprendemos.

    un saludo

    miércoles, 26 de febrero de 2014 8:45
  • Hola Panzerlhnen,

    Como dice el moderador:

    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.
    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Un saludo

    jueves, 27 de febrero de 2014 9:44