Objet dupliqué Entity Framework et toutes les propriétés enfant
Structure exemple
public class Page
{
public int PageId { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public virtual List<Section> Sections { get; set; }
}
public class Section
{
public int SectionId { get; set; }
public int PageId { get; set; }
public virtual Page Page { get; set; }
public virtual List<Heading> Headings { get; set; }
}
public class Heading
{
public int HeadingId { get; set; }
public int SectionId { get; set; }
public virtual Section Section { get; set; }
}
Il est intéressant de noter que ma structure a plus de niveaux que cela, mais cela devrait être suffisant pour expliquer ce que je suis en train de réaliser.
Donc je charge mon Page
objet que je puis Clone de l'objet et de faire quelques changements mineurs pour les propriétés de Page
c'est à dire Prop1
Prop2
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
Dans l'exemple ci-dessus clonedPage
structure est fine et une nouvelle Page
est ajouté à la base de données. Cependant, je crois, parce que l'identité de l'enfant, les objets sont ensemble et la relation de l'enfant est toujours un à plusieurs. L'objet d'origine pageFromDb
perdrez tous les enfants en tant que cadre de l'entité au lieu de créer de nouveaux Section
d'objets pour la cloné Page
sera mise à jour du Section.PageId
à la nouvelle page insérée.
Je crois qu'un correctif pour ce serait de foreach
foreach
etc. et de définir toutes les Id de 0
avant de l'insérer ensuite, entity framework créer de nouveaux dossiers foreach objet. Est-il un moyen plus facile/mieux pour cloner un objet dans une entité cadre de l'environnement.?
source d'informationauteur Ashley Medway
Vous devez vous connecter pour publier un commentaire.
Pour Entity Framework pour traiter le clone d'un nouvel objet graphique lors de la persistance du graphique, toutes les entités dans le graphique doivent être déconnecté du contexte dans lequel l'entité de la racine a été récupéré.
Cela peut être fait à l'aide de la
AsNoTracking
méthode sur le contexte.Par exemple, c'est se tirer une page et associés sections graphique à partir de la base de données et désactiver le suivi. Effectivement, c'est un clone comme si vous l'ajouter à votre Page DbSet et enregistrer il va créer un nouvel objet graphique dans la base de données. I. e. une nouvelle Page de l'entité et de nouvelles entités de la Section en conséquence. Remarque, vous n'aurez pas besoin d'appeler votre
Clone
méthode.Essayer cette!