Usuario
Copiar Objecto crear uno nuevo, y actualizar referencias .

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.
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 -
-
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- Editado Leandro TuttiniMVP jueves, 15 de diciembre de 2011 4:40