none
Primary Key compuestas RRS feed

  • Pregunta

  • Hola Mi duda es la siguiente:

    estoy utilizando VS 2008 (C#) , EF, SQL 2000.

    Tengo dos entidades: por ejemplo

    1-UnidadNegocio( clave IdunidadNegocio, tipo entero)

    2- SegundaTabla( clave compuesta: IdUnidadNegocio, IdSegundaTabla).

    IdSegundaTabla es de  tipo entero

    Al crear un nuevo objeto de la Segunda entidad voy a tener como dato a que  Unidad de Negocio al cual pertenece. Necesito que el Id de la segunda tabla sea incremental.

    Cual sería la mejor forma de realizar esto? 

    Gracias!

    Saludos!

    martes, 27 de noviembre de 2012 18:24

Respuestas

  • Porque no de claras el campo como identity(se incrementa solo) en la base de datos asi el campo se incrementa solo cuando crees un nuevo registro.

    La otra opcion seria utilizar el operador max para obtener el valor mayor del campo e incrementarlo manual.

    Algo asi

    int maxid = context.SegundaTabla.Max(p => p.IdSegundatabla);

    int nextid = maxid+1;


    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    • Marcado como respuesta Irina_s miércoles, 28 de noviembre de 2012 17:16
    martes, 27 de noviembre de 2012 22:54
  • Correcto, no había entendido lo que comentas.

    Si quieres que dependa del primer valor va a estar complicado, y tendrás que hacerlo con un MAX o similar.

    Para solucionar el tema de la concurrencia tendrás que manejarlo con el IsolationLevel para que se bloquee bien.


    @XaviPaper
    http://geeks.ms/blogs/xavipaper

    • Marcado como respuesta Irina_s miércoles, 28 de noviembre de 2012 17:16
    miércoles, 28 de noviembre de 2012 16:01

Todas las respuestas

  • Porque no de claras el campo como identity(se incrementa solo) en la base de datos asi el campo se incrementa solo cuando crees un nuevo registro.

    La otra opcion seria utilizar el operador max para obtener el valor mayor del campo e incrementarlo manual.

    Algo asi

    int maxid = context.SegundaTabla.Max(p => p.IdSegundatabla);

    int nextid = maxid+1;


    Saludos.


    Cristian Torres
    Blog Cristian Torres

    El Salvador - San Salvador

    • Marcado como respuesta Irina_s miércoles, 28 de noviembre de 2012 17:16
    martes, 27 de noviembre de 2012 22:54
  • Yo lo pondría como Identity, ya que el hacer el max en código puede haber problemas de concurrencia...

    Debes poner el campo en EF como identity y en la BD también

    Un saludo y espero haberte ayudado


    @XaviPaper
    http://geeks.ms/blogs/xavipaper

    martes, 27 de noviembre de 2012 23:22
  • EL Problema es que en la segunda Tabla, elcampo q debe ser incremental, depende del primer campo.

    Es decir, deberia ser una cosa asi

    SEGUNDA TABLA

     IdUnidadNegocio IdSegundaTabla

              1 1

      1 2

      1 3

             .... ....

    2 1

    2 2

    El IdsegundaTabla se incrementa dependiendo de la Unidad de negocio.

    Se me ocurrió hacer con lo del MAX, pero también había pensado en el tema de concurrencia. 

    Yo puse en el SQL como identity  el segundo Id, pero obviamente me incrementa independientemente del valor del primer Id.

    miércoles, 28 de noviembre de 2012 15:36
  • Correcto, no había entendido lo que comentas.

    Si quieres que dependa del primer valor va a estar complicado, y tendrás que hacerlo con un MAX o similar.

    Para solucionar el tema de la concurrencia tendrás que manejarlo con el IsolationLevel para que se bloquee bien.


    @XaviPaper
    http://geeks.ms/blogs/xavipaper

    • Marcado como respuesta Irina_s miércoles, 28 de noviembre de 2012 17:16
    miércoles, 28 de noviembre de 2012 16:01
  • Ok. Muchas Gracias.

    Lo del IsolationLevel, tendré que investigarlo un poco mas, escuche hablar pero nunca utilice.

    Saludos!

    miércoles, 28 de noviembre de 2012 17:15