none
insercion duplicada en una relacion RRS feed

  • Pregunta

  • Buenas, el problema es largo de describir asi que vamos al grano

    Tengo una lista de productos almacenado en una entidad

    Tengo una entidad "ticket", que tiene a su vez una relacion con la entidad "LineaTicket", esta, cuando creamos hace referencia a los objetos productos que tengo almacenado.

    Mi problema surge cuando quiero guardar en la base de datos un objeto nuevo "Ticket", me tira un error diciendo que no puedo insertar un objetos producto duplicado. Pareceria, que esta queriendo guardar el objeto producto que esta en la linea ticket como si fuera uno nuevo, y no como una relacion. 

    Como corrijo esto??

    Aca pego el código:

    Public Class frmGenerarTicketAlmacen
    
        Dim listaLineaTicketSeleccionado As New List(Of lineaTicketAlmacen)
        Dim ticketSeleccionado As New ticketAlmacen
        Private _db As New PollosContext
        Public Property db() As PollosContext
            Get
                Return _db
            End Get
            Set(ByVal value As PollosContext)
                _db = value
            End Set
        End Property
        Private Sub frmGenerarTicketAlmacen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            dgvListaLineaTicketAlmacen.DataSource = listaLineaTicketSeleccionado
            dgvListaLineaTicketAlmacen.Refresh()
            txtOperador.Text = mdi1.operador
    
            ticketSeleccionado.Operador = txtOperador.Text
            ticketSeleccionado.FechaPedido = dtpFecha.Value
    
        End Sub
    
        Private Sub btAgregarBulto_Click(sender As Object, e As EventArgs) Handles btAgregarBulto.Click
    
            Dim frm As New frmBusquedaProductos("Almacen", db)
            frm.db = db
            frm.ShowDialog(Me)
            If Not (frm.prodSeleccionado Is Nothing) Then
                Dim lta As New lineaTicketAlmacen
                lta.Bulto = frm.prodSeleccionado
                lta.CantidadBultos = frm.cantidadSeleccionada
                lta.cumplido = False
                '      lta.Producto = frm.prodSeleccionado
                listaLineaTicketSeleccionado.Add(lta)
                dgvListaLineaTicketAlmacen.DataSource = Nothing
                dgvListaLineaTicketAlmacen.DataSource = listaLineaTicketSeleccionado
                dgvListaLineaTicketAlmacen.Refresh()
            End If
        End Sub
    
        Private Sub btnAceptar_Click(sender As Object, e As EventArgs) Handles btnAceptar.Click
            ticketSeleccionado.lineaTicket = listaLineaTicketSeleccionado
            db.TicketAlmacenSet.Add(ticketSeleccionado)
            db.SaveChanges() 'aca da el error
    
            Dim frm As New ImpresionTicket
            frm.ticketSeleccionado = ticketSeleccionado
    
        End Sub
    End Class

    martes, 23 de septiembre de 2014 15:06

Respuestas

Todas las respuestas

  • hola

    recuerda que cuando pones en el contexto una entidad desconectada debes marcarle el estado

    db.Entry(ticketSeleccionado).State = EntityState.Unchange;

     Add/Attach and Entity States

    sino le indias a EFel estado y usas solo el add() entonces va a querer insertarlo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta NioDeTark lunes, 20 de octubre de 2014 13:34
    martes, 23 de septiembre de 2014 15:17
  • Leandro, pero me confunde un poco el tema. En mi modelo, tengo el objeto Ticket que es nuevo, este esta asociado a N objetos NUEVOS llamadas LineaTicket, y cada linea de ticket esta asociado a un objeto Producto que YA EXISTE. 

    entonces, como hago la insercion del objeto Ticket? 

    martes, 30 de septiembre de 2014 20:41