none
Obtener id RRS feed

  • Pregunta

  • Hola como va ? Una consulta tengo este escenario una tabla principal cuyo id principal es identity, luego tres tablas aparte no relacionadas donde existe un campo donde debería grabarse el id de la tabla principal al mismo momento, cuando grabo uso "using (var dbContextTransaction = db.Database.BeginTransaction())". Las preguntas como puedo obtener el id de la tabla principal que aun no se grabo, había pensado en una tabla que vaya guardando el ultimo id generado y de ahí sumar mas 1, ya que si consulto directamente en la tabla principal ejemplo tengo ultimo id 4 el siguiente es 5 pero si se borra el registro de la tabla el ultimo seria 3 mas 1 = 4 pero el identity ya va a ser 5, no se si esto lo debería hacer así, o existe alguna otra forma. Uso linq. Desde ya gracias.
    lunes, 22 de marzo de 2021 12:51

Respuestas

  • Las preguntas como puedo obtener el id de la tabla principal que aun no se grabo

    No, no se puede. El Id no se sabe hasta que se graba. No vale la solución de tomar el último valor y sumarle 1, porque a veces pega saltos mayores que 1. Esto no solo sucede en el caso de que otro usuario grabe algo mientras tanto, sino que incluso aunque no existan más usuarios, a veces el motor de SQL pega saltos mayores (por ejemplo, hay veces que deja un "hueco" de 1000 unidades). No puedes confiar en el el Identity siempre avance de 1 en 1.

    Me temo que no tendrás más remedio que esperar hasta que se haga la grabación en la primera tabla y entonces leer cuál es el Id que se ha grabado (Entity Framework lo carga en la propia entidad después de grabarla), asignárselo a las otras tablas, y volver a grabar. Si quieres puedes encerrar las dos grabaciones en un TransactionScope para garantizar que ocurren ambas o ninguna en caso de un error.

    • Marcado como respuesta EnzoTuc40 lunes, 22 de marzo de 2021 13:12
    lunes, 22 de marzo de 2021 13:07

Todas las respuestas

  • Las preguntas como puedo obtener el id de la tabla principal que aun no se grabo

    No, no se puede. El Id no se sabe hasta que se graba. No vale la solución de tomar el último valor y sumarle 1, porque a veces pega saltos mayores que 1. Esto no solo sucede en el caso de que otro usuario grabe algo mientras tanto, sino que incluso aunque no existan más usuarios, a veces el motor de SQL pega saltos mayores (por ejemplo, hay veces que deja un "hueco" de 1000 unidades). No puedes confiar en el el Identity siempre avance de 1 en 1.

    Me temo que no tendrás más remedio que esperar hasta que se haga la grabación en la primera tabla y entonces leer cuál es el Id que se ha grabado (Entity Framework lo carga en la propia entidad después de grabarla), asignárselo a las otras tablas, y volver a grabar. Si quieres puedes encerrar las dos grabaciones en un TransactionScope para garantizar que ocurren ambas o ninguna en caso de un error.

    • Marcado como respuesta EnzoTuc40 lunes, 22 de marzo de 2021 13:12
    lunes, 22 de marzo de 2021 13:07
  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    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.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 22 de marzo de 2021 17:07
    Moderador