Ví dụkhung Entity trùng lặp đối tượng và tất cả các thuộc tính con
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; }
}
Nó đáng chú ý là cấu trúc thực tế của tôi có mức hơn này, nhưng điều này là đủ để giải thích những gì tôi đang cố gắng để đạt được.
Vì vậy, tôi nạp đối tượng Page
của tôi sau đó tôi Clone đối tượng đó và thực hiện một số thay đổi nhỏ để các thuộc tính của Page
tức Prop1
, Prop2
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
Trong ví dụ trên clonedPage
cấu trúc là tốt và mới Page
được thêm vào cơ sở dữ liệu. Tuy nhiên tôi tin rằng bởi vì các Id của các đối tượng trẻ em được thiết lập và mối quan hệ của trẻ em luôn luôn là một đến nhiều. Đối tượng gốc pageFromDb
sẽ mất tất cả các đối tượng con là khung thực thể thay vì tạo đối tượng Section
mới cho nhân bản Page
sẽ cập nhật Section.PageId
vào trang vừa được chèn.
Tôi tin rằng một sửa chữa cho điều này sẽ được foreach
, foreach
, vv và đặt tất cả của Id để 0
trước khi chèn sau đó khuôn khổ tổ chức sẽ tạo ra kỷ lục mới đối tượng foreach. Có cách nào dễ dàng hơn/tốt hơn để sao chép một đối tượng trong môi trường khung thực thể.
Phương pháp Clone làm gì? Nó đang làm một bản sao sâu? Bạn có thể yêu cầu không sao chép các Trường Id không? Miễn là các bộ sưu tập của bạn là đúng, EF sẽ xây dựng các Id cho bạn sau khi chèn. – Tim
@Tim Chỉ cần sử dụng AutoMapper ở cấp đối tượng 'Trang' hàng đầu. –
bản sao có thể có của [Nhân bản dữ liệu trên khung thực thể] (http://stackoverflow.com/questions/2185155/cloning-data-on-entity-framework) –