Example structure
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; }
}
It's worth noting that my actual structure has more levels than this but this should be enough to explain what I'm trying to achieve.
So I load my Page
object I then Clone that object and make some minor changes to the properties of Page
i.e. Prop1
, Prop2
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
In the example above clonedPage
structure is fine and a new Page
is added to the database. However I believe because the Id's of the child objects are set and the relationship of the children is always one to many. The original object pageFromDb
will lose all it children as entity framework instead of creating new Section
objects for the cloned Page
will update the Section.PageId
to the newly inserted page.
I believe a fix for this would be to foreach
, foreach
, etc. and set all the Id's to 0
before inserting then entity framework will create new records foreach object. Is there any easier/better way to clone an object in an entity framework environment.?
Page
object level. – Ashley Medway