Пример структуры
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; }
}
Стоит отметить, что моя фактическая структура имеет больше уровней, чем это, но этого должно быть достаточно, чтобы объяснить, чего я пытаюсь достичь.
Итак, я загружаю свой объект Page
, а затем клонирую этот объект и делаю небольшие изменения в свойствах Page
i.e. Prop1
, Prop2
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
В приведенном выше примере clonedPage
структура прекрасна, и в базу данных добавляется новый Page
. Однако я верю, потому что Идентификатор дочерних объектов задан, и отношение детей всегда одно для многих. Исходный объект pageFromDb
потеряет все дочерние элементы в качестве рамки сущности вместо создания новых объектов Section
для клонированного Page
обновит Section.PageId
на вновь вставленной странице.
Я считаю, что исправление для этого было бы foreach
, foreach
и т.д. и установить все идентификаторы на 0
перед вставкой, тогда инфраструктура сущности создаст новые записи для каждого объекта. Есть ли более простой/лучший способ клонирования объекта в среде фреймворка сущности.?