2011-09-23 15 views
6

मैं इस वर्ग है (जब उन्हें संदर्भ है कि उन्हें बचाया से हो रही)आलसी लोड हो रहा है काम नहीं कर रहा है जब नए बचाया वस्तुओं, पर

public class Comment 
{  
    public long Id { get; set; } 
    public string Body { get; set; } 
    public long OwnerId { get; set; } 
    public virtual Account Owner { get; set; } 
    public DateTime CreationDate { get; set; } 
} 

समस्या आभासी संपत्ति के मालिक है कि मैं null object reference exception जब कर रही है :

comment.Owner.Name 

के बाद वस्तु (DbContext का एक ही उदाहरण से) बचा लिया गया था जब यह सही बुला एक नया संदर्भ के साथ काम करेंगे

एक इस बारे में किसी को कुछ पता है?

उत्तर

18

ऐसा इसलिए है क्योंकि आपने निर्माता के साथ Comment बनाया है। इसका मतलब है कि टिप्पणी उदाहरण प्रॉक्सी नहीं है और यह आलसी लोडिंग का उपयोग नहीं कर सकता है। इस के लिए, बहुत संक्षिप्त और बात करने के लिए

var comment = context.Comments.Create(); 
// fill comment 
context.Comments.Add(comment); 
context.SaveChanges(); 
string name = comment.Owner.Name; // Now it should work because comment instance is proxied 
+0

धन्यवाद: आप Create विधि DbSet पर बजाय Comment की प्रॉक्सी उदाहरण प्राप्त करने के लिए उपयोग करना चाहिए! –

+1

किसी और के लिए ऐसा करने के लिए कोई रास्ता नहीं ढूंढ रहा है, लेकिन कहें, एमवीसी बाइंडर (जो डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करता है) का उपयोग करके, आप स्पष्ट रूप से इस तरह संदर्भित कर सकते हैं: संदर्भ। प्रवेश (टिप्पणी)। संदर्भ (x => x .Owner) .load(); –

+0

m.t.bennett: यह बहुत उपयोगी था, आपकी टिप्पणी के लिए धन्यवाद। –

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