उदाहरण संरचनाइकाई की रूपरेखा डुप्लिकेट वस्तु और सभी बच्चे गुण
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
यानी Prop1
के गुणों के कुछ मामूली परिवर्तन करें, Prop2
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
clonedPage
संरचना ऊपर के उदाहरण में ठीक है और एक नया Page
जोड़ा जाता है डेटाबेस में। हालांकि मुझे विश्वास है क्योंकि बच्चे के ऑब्जेक्ट्स के आईडी सेट हैं और बच्चों के रिश्ते हमेशा एक हैं। मूल ऑब्जेक्ट pageFromDb
क्लोन Page
के लिए नई Section
ऑब्जेक्ट्स बनाने के बजाय नए सभी डाले गए पृष्ठ पर Section.PageId
को अपडेट करने के बजाय सभी बच्चों को इकाई फ्रेमवर्क के रूप में खो देगा।
मेरा मानना है कि इसके लिए एक ठीक हो foreach
, foreach
, आदि के लिए और फिर इकाई की रूपरेखा डालने नए रिकॉर्ड foreach वस्तु बनाने से पहले 0
करने के लिए सभी ईद के सेट होगा। क्या एक इकाई ढांचे के माहौल में ऑब्जेक्ट को क्लोन करने का कोई आसान/बेहतर तरीका है?
क्लोन विधि क्या करती है? क्या यह एक गहरी प्रतिलिपि कर रहा है? क्या आप इसे आईडी फ़ील्ड कॉपी न करने के लिए कह सकते हैं? जब तक आपके संग्रह सही होते हैं, तब तक ईएफ प्रविष्टियों के बाद आपके लिए आईडी बनायेगा। – Tim
@ टिम बस शीर्ष 'पृष्ठ' ऑब्जेक्ट स्तर पर ऑटोमैपर का उपयोग कर रहा है। –
[संभावित फ्रेमवर्क पर क्लोनिंग डेटा] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2185155/cloning-data-on-entity-framework) –