5

के साथ एक समय में दो संबंधित इकाइयां कैसे बना सकता हूं तो कहें कि मेरे पास 2 इकाइयां हैं, Post और PostHistory। जब भी मैं कोई पोस्ट बना या संपादित करता हूं, तो मैं किसी पोस्ट में किए गए सभी परिवर्तनों को लॉग इन करने के लिए PostHistory के रूप में इसकी एक सटीक प्रतिलिपि बनाना चाहता हूं। कहो पोस्ट इकाई निम्नलिखित परिभाषा है:मैं ईएफ 4 कोड-प्रथम

public class Post 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
    public virtual ICollection<PostHistory> PostHistory{ get; set; } 
} 

समस्या आता है जब मैं अपनी पहली Post पैदा करते हैं। उदाहरण के लिए, अगर मैं इस प्रयास करें:

Post post = new Post { Text = "Blah" }; 
context.Posts.Add(post); 
PostHistory history = new PostHistory { Text = "Blah"}; 
context.PostHistory.Add(history); 
post.PostHistory.Add(history); 

ऐसा इसलिए है क्योंकि जब से post और history दोनों नए संस्थाएं हैं, इसलिए Post.PostHistory के कारण यह अभी तक शुरू कर दिया गया नहीं होने रिक्त है असफल हो जायेगी। ऐसा करने का एकमात्र तरीका यह है कि पहले डीबी पर post प्रतिबद्ध करें, फिर डेटाबेस में history प्रतिबद्ध करें, लेकिन मुझे नहीं पता कि इसके लिए 2 अलग-अलग आवेषण क्यों आवश्यक हैं।

अगर मैं एक निर्माता ICollection करने के लिए एक List<T> सब कुछ ठीक काम करता है, लेकिन अन्य मुद्दों List<T> कारणों से कार्यान्वयन के लिए मजबूर है, और लगभग कोई कोड पहले ट्यूटोरियल इस मजबूर दीक्षा करना आरंभ करता है।

तो इस स्थिति को संभालने का सबसे अच्छा तरीका क्या है?

उत्तर

4

आप क्लाइंट कोड अपने आप में सूची को प्रारंभ कर सकते हैं:

Post post = new Post 
{ 
    Text = "Blah" 
    PostHistory = new List() 
    { 
     new PostHistory { Text = "Blah" } 
    } 
};   
context.Posts.Add(post); 
context.SaveChanges(); 

हालांकि, वहाँ निर्माता अंदर संग्रह आरंभ के साथ कुछ भी गलत नहीं है और यह वास्तव में सिफारिश की है, क्योंकि यह आप में यह प्रारंभ करने में होने से बचाता है सभी ग्राहक कोड।

+0

संग्रह के रूप में संग्रह को प्रारंभ करना काम करता है लेकिन यह एक अच्छा विकल्प नहीं है। इसका कारण यह है कि आप एक सूची को एक EntityCollection में परिवर्तित नहीं कर सकते हैं (इसलिए मैं जांच सकता हूं कि संग्रह उदाहरण के लिए उत्सुक हो गया है या नहीं)। – KallDrexx

+0

आप कैसे जांचते हैं कि संग्रह 'EntityCollection' के साथ उत्सुक है या नहीं? –

+0

'EntityCollection ' वर्ग में 'IsLoaded' प्रॉपर्टी – KallDrexx

संबंधित मुद्दे