none
insertar multiples entidades relacionadas RRS feed

  • Pregunta

  • Buenas, tengo una duda, resulta que estoy generando una entidad que tiene una estructura de Árbol, es decir, lo típico, de un nodo pueden depender varios nodos hijos, los hijos tienen un solo padre, y el nodo raíz no tiene padre. Para modelar esto utilizo una entidad que tiene una referencia circular. Pero ADEMAS, existen  CADA NODO tiene una relación con otra entidad que funcionaria de plantilla... la lógica anda correctamente, mi problema es a la hora de insertar, donde me tira el siguiente error:

    Las entidades de 'Model1Container.nodosContenidos' participan en la relación 'FK_PresentacionesNodoContenido'. Se encontró 0 'Presentaciones' relacionadas. Se esperaba: 1 'Presentaciones'.

    Pero ya corroboré que exista en la base de datos dicha entidad Prestaciones.... 

    Alguna idea de que puedo hacer para solucionar esto!?

    saludos...

    miércoles, 19 de septiembre de 2012 22:14

Todas las respuestas

  • como es que llevas a cabo ese insert ?

    o sea las entidades que arman el arbol que relaciona la wentidad padre con los hijos, generando esta circularidad

    como es que armas estas entidades? quizas las creas desde clases POCO y las attachas al contexto

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 20 de septiembre de 2012 2:16
  • Si entendi lo que me dijiste (:S) es como tu dices...

    Esto que pego abajo está en un boton de una web como para probar, cuando funcione bien lo distribuire de una mejor manera... creo

       Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                Dim db As New Model1Container
                'Lo de abajo lo ejecuto Solo una vez, es para crear un arbol de una plantilla en especial, Llamada Curriculum Vitae"
                ' Dim c As New crearPlantillaCurriclumVitae(db)
                Dim pres As Presentaciones = Presentaciones.CreatePresentaciones(26050586, 0) ', "matias", Today, "")
                pres.FechaCreacion = Now()
                pres.nodosContenidos = Nothing
                db.Presentaciones.AddObject(pres)
                db.SaveChanges()
                'Recupero la plantilla CV para luego pasarla
                Dim p = (From pl As Plantilla In db.Plantillas Select pl Where pl.Tipo = "Curriculum Vitae").FirstOrDefault
                Dim nc As nodoContenido
                nc = Nothing
                nc = NodoPlantilla.crearArbolContenido(p, pres, db)
                db.nodosContenidos.AddObject(nc)
                'nc.Presentaciones = pres
                db.SaveChanges()
    
                Dim a As Integer = nc.Hijos.Count
            Catch ex As Exception
            End Try
        End Sub
    Los profesores crearian presentaciones, estas podrian ser de diferentes tipos, por ejemplo CV, todas tienen una estructura de arbol, y todos los tipos de presentaciones se guardan en una entidad llamada NodoPlantilla. Luego, esta entidad es la encargada de generar los arboles que tendran las presentaciones de los profesores, en otra entidad llamada nodoContenido. Y el proceso de creacion es simple, por cada nodo que tenga la plantilla, se crea un nodo en el contenido. 

    Pego abajo los procesos que implican lo que estuve explicando.

    Shared Function crearArbolContenido(p As Plantilla, pres As Presentaciones, db As Model1Container) As nodoContenido Dim nodoPlant = (From np As NodoPlantilla In db.NodoPlantillas Select np Where np.id_Nodo = p.Raiz.id_Nodo).FirstOrDefault Dim nc As nodoContenido = nodoContenido.CreatenodoContenido("", 0) ', pres.v_ProfesorDni, nodoPlant.id_Nodo, pres.nroPresentacion) nc.NodoPlantillas = nodoPlant nc.Padre = Nothing nc.Presentaciones = pres For Each np As NodoPlantilla In nodoPlant.Hijos np.agregarHijosRecursivos(nc) Next Return nc End Function

    Private Sub agregarHijosRecursivos(nc As nodoContenido) Dim nuevoNodo As nodoContenido = nodoContenido.CreatenodoContenido("", 0) ', nc.Presentaciones_v_ProfesorDni, Me.id_Nodo, nc.nroPresentacion) nuevoNodo.NodoPlantillas = Me nuevoNodo.Padre = nc nuevoNodo.Presentaciones = nc.Presentaciones For Each np As NodoPlantilla In Me.Hijos np.agregarHijosRecursivos(nuevoNodo) Next End Sub

    Al final del proceso recursivo, como verás, se devuelve un objeto de tipo nodoContenido, que basicamente tiene un árbol.... y eso es lo que luego quiero agregar al repositorio,... 

    El error me tira con la relacion que existe con Presentaciones... pero en teoria, como veras, a la presentacion ya la he insertado con anterioridad.

    Saludos, espero que puedas ayudarme

    jueves, 20 de septiembre de 2012 21:13
  • Alguna ayuda con el tema?!

    Saludoss...

    jueves, 27 de septiembre de 2012 20:07