none
Bloqueo optimista con Entity Framework 4 en aplicación de escritorio RRS feed

  • Pregunta

  • Hola,

    Estoy intentando implementar un bloqueo optimista, para los casos en los que 2 usuario simultáneamente modifican un dato de un registro y no me funciona. Voy a explicar los pasos que doy a ver si podéis ayudarme a hacer que funcione.

    Lo primero que he hecho es en mi tabla crear un campo timestamp  ( utilizo sql 2008 )

    Luego me he ido al modelo de datos y le he dicho que me actualice la tabla, ahora ya me aparece el campo timestamp

    Me he ido a las propiedades de dicho campo y en sus propiedades he indicado en modo de simultaneidad "Fixed"

    Finalmente al salvar los cambios he utilizado un try catch para capturar el error que de debería producirse al darse la concurrencia y empezar 2 usuarios la modificación de un mismo registro y grabar uno de ellos y posteriormente el segundo cuando los datos del primero ya han sido grabados.

    ¿Podéis darme alguna sugerencia? 

    Muchas gracias.


    lunes, 3 de septiembre de 2018 13:24

Todas las respuestas

  • Hola Juan José Hernández

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, para que la comunidad de foros pueda entender mejor  lo que quieres hacer, es necesario que coloques el form/código para que podamos asesorarte mejor  en hallar una solución.

    Gracias por usar los foros de MSDN.

    Pablo Rubio

     _____

    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.

    lunes, 3 de septiembre de 2018 18:34
  • Buenos días,

    Copio la pantalla de la información del modelo y el código:

    

        Private Sub btnGuardar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGuardar.Click

            Try
                Validate()


                If ValidarOferta() Then
                    OfertasSATCabBindingSource.EndEdit()


                    Dim oOferta = DirectCast(OfertasSATCabBindingSource.Current, OfertasSATCab)


                    If OfertasSATCabDL.guardar(oOferta) Then

                        MsgBox("Cambios guardados", vbInformation)

                    End If


                End If
                'Catch ex2 As DbUpdateConcurrencyException
                '    MsgBox("No se ha podido guardar porque estos datos han sido modificados por otro usuario. Refresca la ventana e inténtelo de nuevo", vbCritical)
            Catch ex2 As OptimisticConcurrencyException
                MsgBox("No se ha podido guardar porque estos datos han sido modificados por otro usuario. Refresca la ventana e inténtelo de nuevo", vbCritical)
            Catch ex As Exception
                MsgBox(ex.ToString, vbCritical)

            End Try
    End Sub

     Shared Function guardar(obj As OfertasSATCab) As Boolean

            Try
                Using dbx As New ModelEntities

                    Dim q = (From c In dbx.OfertasSATCab Where c.CodigoOferta = obj.CodigoOferta Select c).FirstOrDefault

                    If IsNothing(q) Then
                        dbx.OfertasSATCab.AddObject(obj)
                    Else
                        dbx.OfertasSATCab.ApplyCurrentValues(obj)

                    End If
                    Return dbx.SaveChanges() > 0
                End Using

            Catch ex As Exception
                Throw
                Return False
            End Try
            Return False

        End Function

    Muchas gracias de nuevo, un saludo.

    martes, 4 de septiembre de 2018 5:56