8

जैसा कि मुझे पता है कि इकाई फ्रेमवर्क पहचान मानचित्र पैटर्न लागू करता है, इसलिए ईएफ स्मृति में कुछ इकाइयों को कैश करता है।इकाई ढांचे को कैसे अमान्य करें 4 आंतरिक कैश

मुझे आपको उदाहरण दें।

var context = new StudentContext(); 

var student = context.Students.Where(st => st.Id == 34).FirstOrDefault(); 

// any way of changing student in DB 
var anotherContext = new StudentContext(); 
var anotherStudent = anotherContext.Students.Where(st => st.Id == 34).FirstOrDefault(); 
anotherStudent.Name = "John Smith"; 
anotherContext.SaveChanges(); 

student = context.Students.Where(st => st.Id == 34).FirstOrDefault(); 
// student.Name contains old value 

वहाँ पहले संदर्भ के कैश को अमान्य और संदर्भ की पुनर्रचना के बिना नए student इकाई को पुनः प्राप्त करने के लिए एक रास्ता है?

सहायता के लिए धन्यवाद।

उत्तर

19

आपको इकाई को फिर से लोड करने के लिए ईएफ को मजबूर करना होगा। आप क्या कर सकते हैं कि या तो प्रति इकाई:

context.Refresh(RefreshMode.StoreWins, student); 

या आप क्वेरी के लिए यह कर सकते हैं:

ObjectQuery<Student> query = (ObjectQuery<Student>)context.Students.Where(st => st.Id == 34); 
query.MergeOption = MergeOption.OverwriteChanges; 
student = query.FirstOrDefault(); 

या वस्तु सेट पर विश्व स्तर पर इसे बदल:

context.Students.MergeOption = MergeOption.OverwriteChanges; 
8

संदर्भ रीफ्रेश करने का प्रयास:

context.Refresh(RefreshMode.StoreWins, yourObjectOrCollection); 
अपने मामले में

तो तुम ObjectContext

var objContext = ((IObjectContextAdapter)this).ObjectContext; 

के लिए मिलता है और यह ताज़ा करने की आवश्यकता:

objContext.Refresh(RefreshMode.StoreWins, anotherStudent); 

अधिक जानकारी यहाँ: http://msdn.microsoft.com/en-us/library/bb896255.aspx

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