2012-12-04 54 views
5

संदर्भ के बाद, नीचे दिए गए फ़ंक्शन में। SavChanges(), इकाई PropertyType हमेशा शून्य है। मैं ऑब्जेक्ट कॉन्टेक्स्ट से डीबीसीएन्टेक्स्ट (डेटाबेस के साथ पहले) और परिवर्तन से पहले, यह ठीक काम करता है और अब यह नहीं करता है। क्या मुझे कुछ याद आ रही है?Lazy लोडिंग SaveChanges इकाई फ्रेमवर्क

मैं प्रॉपर्टी टाइप टाइप की जांच करता हूं और यह सही ढंग से लिखा गया है और डीबी में मौजूद है। डीबी और एडीएमएक्स फ़ाइल में सभी रिश्तों को सही ढंग से सेटअप किया जाता है। जेनरेट की गई .tt फ़ाइलें आभासी के रूप में PropertyType ऑब्जेक्ट को दिखाती हैं। यह एफई 5.

है यहाँ कोड (इकाई संपत्तियों की गैर-महत्वपूर्ण कार्य हटा दिया गया है) है:

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID) 
    { 
     ListingTransferDetail transfer_detail = new ListingTransferDetail(); 
     transfer_detail.PropertyTypeID = PropertyTypeID; 

     using (IDXEntities context = new IDXEntities()) 
     { 
      context.ListingTransferDetails.Add(transfer_detail); 
      context.SaveChanges(); 
      TransferProgress += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\"."; 
     } 

     return transfer_detail; 
    } 

अग्रिम धन्यवाद।

संपादित

मैंने पाया है कि अगर मैं SaveChanges() के बाद कोड की इस पंक्ति जोड़ने के लिए, यह काम करता है है। हालांकि, यह आदर्श नहीं है, मैं डिफ़ॉल्ट रूप से इसे इकाई कैसे लोड कर सकता हूं?

context.Entry(transfer_detail).Reference(a => a.PropertyType).Load(); 

धन्यवाद।

उत्तर

12

इसके बजाय आप क्रम में new का उपयोग कर काम करने के लिए आलसी लोड हो रहा है सक्षम करने के लिए एक छद्म बनाने की जरूरत:

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID) 
{ 
    using (IDXEntities context = new IDXEntities()) 
    { 
     ListingTransferDetail transfer_detail = 
      context.ListingTransferDetails.Create(); 
     transfer_detail.PropertyTypeID = PropertyTypeID; 

     context.ListingTransferDetails.Add(transfer_detail); 
     context.SaveChanges(); 

     //... 

     // the following triggers lazy loading of PropertyType now 
     var something = transfer_detail.PropertyType.SomeProperty; 
    } 

    return transfer_detail; 
} 
+0

यह मेरी समस्या हल। हालांकि, ऐसा करने के लिए संदर्भ को तुरंत चालू करने के बाद इकाई बनाई जानी चाहिए। इसलिए, मेरे संपादन में दिखाए गए संदर्भ को मैन्युअल रूप से संदर्भित करना मेरे लिए बेहतर होगा। सहायता के लिए धन्यवाद! – Ricketts