8

Khi tôi biết Khuôn khổ thực thể triển khai Mẫu bản đồ nhận dạng, vì vậy EF lưu trữ một số thực thể trong bộ nhớ.Làm thế nào để vô hiệu hóa khung thực thể 4 bộ nhớ cache nội bộ

Hãy để tôi cung cấp cho bạn ví dụ.

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 

Có cách nào để vô hiệu hóa bộ nhớ cache của bối cảnh đầu tiên và truy xuất thực thể student mới mà không tạo lại ngữ cảnh không?

Cảm ơn bạn đã trợ giúp.

Trả lời

19

Bạn phải buộc EF phải tải lại thực thể. Bạn có thể làm điều đó mỗi thực thể:

context.Refresh(RefreshMode.StoreWins, student); 

hoặc bạn có thể làm điều đó cho truy vấn:

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

hoặc thay đổi nó trên toàn cầu trên đối tượng thiết lập:

context.Students.MergeOption = MergeOption.OverwriteChanges; 
8

thử làm mới bối cảnh:

context.Refresh(RefreshMode.StoreWins, yourObjectOrCollection); 

Vì vậy, trong trường hợp của bạn, bạn cần phải nhận được đến ObjectContext

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

Và làm mới nó:

objContext.Refresh(RefreshMode.StoreWins, anotherStudent); 

Thông tin thêm ở đây: http://msdn.microsoft.com/en-us/library/bb896255.aspx

Các vấn đề liên quan