Partiendo del supuesto que tenemos un objeto que tiene objetos relacionados (hijos), lo podemos clonar incluyendo sus objetos relacionados.
Para hacerlo tenemos que usar “AsNoTracking” en “Entity Framework”, de esta manera:
var clon = context.Alumno
.AsNoTracking()
.Include(a => a.Asignaciones)
.Include(a => a.Domicilios)
.Single(a => a.AlumnoId == "5");
Como puedes ver, estamos encontrando el alumno que tenga un Id igual a 5, y estamos especificando que se incluyan sus objetos relacionados (hijos) de asignaciones y domicilios. Esto va a encontrar al alumno y guardarlo en la variable “clon”, la cual contendrá todos sus descendientes de asignaciones y domicilios.
Si no utilizas “AsNoTracking” entonces todo cambio que hagas en el objeto nuevo va a operar, obviamente, sobre el objeto original.
Al usar “AsNoTracking”, puedes hacer las modificaciones que gustes a “clon” y al final guardarlo. Cuando hagas esto se creará una copia nueva del objeto original, es decir, lo habrás duplicado.