2013-09-05 6 views
5

डालने के बाद शून्य वापस आती है मैंने अपना आवेदन ईएफ 4 से ईएफ 5 में माइग्रेट कर दिया है। मैंने पिछले संस्करण के साथ नीचे दिए गए कोड का उपयोग एक नए जोड़े गए आइटम की संबंधित इकाई प्राप्त करने के लिए किया था।नेविगेशन संपत्ति

Student s = new Student(); 
s.Name = _name; 
s.ClassID = _cID; 

db.Students.Add(s); 
db.SaveChanges(); 

ClassRoom c = s.ClassRoom; 

इसलिए मुझे विशिष्ट वर्ग इकाई c पर प्राप्त होती थी। लेकिन अब s.ClassRoom शून्य लौटाता है।

मैं छात्र के लिए ClassRoom इकाई कैसे प्राप्त करूं? क्या मुझे db.ClassRooms.FirstOrDefault(....) का उपयोग करना है?

उत्तर

8

समस्या यह है कि आपने अभी तक नेविगेशन प्रॉपर्टी लोड नहीं की है।

आप उपयोग कर सकते हैं:

db.Students.Include("ClassRoom") 

या

using System.Data.Entity; 
db.Students.Include(s=>s.ClassRoom) 

बेसब्री एनएवी संपत्ति

अन्य विकल्प आभासी के साथ नेविगेशन संपत्ति चिह्नित करके आलसी लोड हो रहा है सक्षम करने के लिए है लोड करने के लिए। मैं व्यक्तिगत रूप से पूर्व (उत्सुक लोडिंग) पसंद करता हूं क्योंकि यह अधिक प्रदर्शन कोड को प्रोत्साहित करता है।

इसके अलावा यहाँ मेरे नेविगेशन गुण लेख की जाँच, मैं शुरू के निकट लोड हो रहा है के बारे में बात के रूप में निम्नानुसार http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

आपका कोड पढ़ना चाहिए:

Student s = new Student(); 
s.Name = _name; 
s.ClassID = _cID; 

db.Students.Add(s); 
db.SaveChanges(); 

//reload the entity from the DB with its associated nav property 
s = db.Students.Include(s=>s.ClassRoom).Single(st=>st.StudentId == s.StudentId); 
ClassRoom c = s.ClassRoom; 
+0

यह EF5 के साथ पेश किया है? –

+1

@LibinTK यह ईएफ की शुरुआत से है, मुझे लगता है। –

+0

@ ओन्ड्रेज जेनेसेक हाँ .. मैंने इसे पहले देखा है। लेकिन यह 'db.Students के बिना भी काम कर रहा था। शामिल करें (" कक्षा Rooms ")' –

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