Tengo una situación en la que no puedo actualizar el registro original en la base de datos, sino crear un nuevo registro, copiar todos los campos desde antiguo y aplicar los cambios a uno nuevo. (algo como esto si se traduce al código)Linq a sql, copie la entidad original a la nueva y guarde
var original = from _orig in context.Test where _orig.id == 5 select _orig;
Test newTest = new Test();
newTest = original;
newTest.id = 0;
context.Test.InsertOnSubmit(newTest);
context.SubmitChanges();
original.parent_id = newTest.id;
original.isActive = 0;
que da la siguiente excepción:
Cannot add an entity that already exists.
¿Es posible hacer que funcione sin necesidad de copiar manualmente todos los campos?
El único problema es que si alguna relatedEntities cuelgan de la entidad original cuando se clona el EntityKey sigue siendo poblado con las claves originales cuando se agrega como newTest. – Mark
@Mark - Cuando implementé una funcionalidad similar, cargué() cualquier entidad secundaria del objeto que estaba clonando, de lo contrario, el serializador no las vería y se saltearía. Una vez que se cargaron, la clonación del objeto funcionó perfectamente y LINQ-to-SQL insertó automáticamente nuevos registros secundarios con las nuevas claves clonadas de los padres en .SubmitChanges(). –
¿Qué quieres decir con .Load()? Estoy haciendo un LoadWith en todas las colecciones para hacer que sean serializadas, pero las entidades uno a uno son nulas después del clon (aunque los ids están configurados) y no estoy loco por el LoadWith. –