none
Copiar Objecto crear uno nuevo, y actualizar referencias . RRS feed

  • Pregunta

  • Hola,

    estoy usando el template de linqtosql, que viene con vs2010

    me genera las clases y asociasiones sin problemas desde la bd y el generador.

    el asunto es que quiero darle mas funcionalidad, por ejemplo, crear un nuevo objecto a partir de otro y grabarlo en la BD.

    tengo las sgtes tablar.

    segusuarios :

    segusrid

    nombre

    prdplanta    :

    prdplantaid

    prdplantanombre

    prdusrplanta :

    prdplantaid

    segusrid

    ----------------------------------------------

    con lo cual la tabla prdusrplanta, tiene referencias circulares hacia segusuarios y prdplanta,

    utilizo el siguien codigo, para clonar un objeto.

    public static T Clone<T>(T source)
            {
                var dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(T));
                using (var ms = new System.IO.MemoryStream())
                {
                    dcs.WriteObject(ms, source);
                    ms.Seek(0, System.IO.SeekOrigin.Begin);
                    return (T)dcs.ReadObject(ms);
                }
    
    
    
            }
    


    para que funcione con las clases circulares, lo resolvi agregando a las clases.

     [System.Runtime.Serialization.DataContract(Namespace = "http://schemas.acme.it/2009/10", IsReference = true)]
    

    Para copiar el objecto, lo realizo de la sgte manera.

      using (DataClasses1DataContext db2 = new DataClasses1DataContext())
                {
                    SEGUSUARIOS usr = db2.SEGUSUARIOS.First(p => p.SEGUSRID == cbUsrOrigen.SelectedValue.ToString());
    
                    SEGUSUARIOS usr2 = Clone(usr);
                    usr2.SEGUSRID = txtUsrDestino.Text;
                    usr2.SEGUSRNOMBRE = txtUsrDestinoNombre.Text;
                    usr2.SEGUSRAPELLIDO = txtUsrDestinoApellido.Text;
                    usr2.SEGUSRPASSWORD = txtUsrDestinoPasswd.Text;
    
                    db2.SEGUSUARIOS.Attach(usr2);
                    db2.SubmitChanges();
                }
    

    el problema, que al cambiar el id, no se me actualiza el id en las referencias circulares, sino que queda con el del primer objecto que clone.

     

    lunes, 12 de diciembre de 2011 21:10

Todas las respuestas

  • el problema, que al cambiar el id, no se me actualiza el id en las referencias circulares

    pero ese id no es clave de la tabla ? no puee aplciar un UPDATE cambiando el id, para cambiar este debes eliminar el registro y crear uno con el nuevo id

    en un UPDATE puede cambiar todos los campos menos el id

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 13 de diciembre de 2011 5:29
  • Sip,

    pero lo quiero en realidad, es copiar un usuario, generar uno nuevo, apartir de las referencias del usuario original.

     

    seria un registro nuevo, no un update.

     

    espero sugerencias.

    sldos..

    miércoles, 14 de diciembre de 2011 12:04
  • hola

    pero estas propiedades que enlazan a segusuarios y prdplanta, las cuales comentas generna la referencia circular porque no le agregas el atributo

     [IgnoreDataMember] 

    con este atributo sobre la propiedad que genera la referencia circular al serializar para conar ya no tendras problemas

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 15 de diciembre de 2011 4:39