Comment copie en profondeur une entité

J'ai trouvé cet extrait ici:

public static T DeepClone<T>(this T obj)
    {
        using (var ms = new MemoryStream()) {
            var bf = new BinaryFormatter();
            bf.Serialize(ms, obj);
            ms.Position = 0;
            return (T)bf.Deserialize(ms);
        }
    }

Qui dit que nous pouvons faire de copie en profondeur de tous les objets par le biais de cette chose.

Je suis en train de faire une copie comme ceci:

db.Detach(myEntity); 
myEntity.EntityKEy = null;
Entity newEntity = new Entity();
newEntity = DeepClone<Entity>(Entity);
db.Entities.AddObject(newEntity);
db.SaveChanges();

IL fonctionne, mais n'a toujours pas la copie de imbriquée\documents connexes. que dois-je faire de mal ici?

J'ai cette structure Entity->ChildEntity ->ChildChildEntity
-> - d'un-à-plusieurs
donc je suppose que quand je copie entité il permettra également de copier tous les enregistrements enfants.

Mise à JOUR:
Après des suggestions, je l'ai fait:

Entity newEntity = new Entity();
Eneity Entity = db.Include("ChildEntity").Where(p=>p.Id==Id).Single();
newEntity = DeepClone<Entity>(Entity);
db.Detach(myEntity); 
myEntity.EntityKEy = null;
db.Entities.AddObject(newEntity);
db.SaveChanges();

Obtention d'exception sur AddObject ligne:

Un objet avec la même clé existe déjà dans le Vousmanager.
Le Vousmanager ne peut suivre plusieurs objets avec le même
clé.

Êtes-vous sûr qu'ils ne sont pas null dans l'objet d'origine?
oui, vous avez raison, des tables de référence sont vides si vous cherchez à le débogage :(. Pourquoi cela pourrait-il arriver? c'est de cette façon-je Récupérer mon objet d'origine: Entité d'origine = db.Les entités.Où(l=>l'.ID == myId).Unique();
Pouvez-vous poster le code de votre entité?
C'est un méchant profonde-la copie de la sorte...pas très performant...
quelle est la bonne façon?

OriginalL'auteur user194076 | 2012-01-26