2010-09-10 43 views
11

Tôi đã tạo ngữ cảnh của riêng mình mà kế thừa từ DbContext. Giả sử tôi có 1 bài đăng trong bảng [Bài viết] của tôi trong cơ sở dữ liệu. Hãy xem xét trường hợp này:Bộ nhớ đệm trong của DbContext (?)

  1. Tôi yêu cầu DbContext chỉ đăng bài này cho lần đầu tiên. Và DbContext trả về nó như mong đợi.
  2. Tôi thay đổi một cột trong bảng [Bài đăng] theo cách thủ công.
  3. Tôi làm mới trang web của mình = Tôi yêu cầu DbContext cho bài đăng này một lần nữa.
  4. DbContext trả về bài đăng có giá trị cũ cho cột cụ thể này!

Tôi nhìn vào SQL Profiler và cơ sở dữ liệu IS trúng mỗi khi tôi làm mới trang web của tôi, vậy tại sao các bài trở có giá trị cũ? Tôi đoán DbContext đang cố gắng để rất thông minh và có một số cơ chế bộ nhớ đệm nội bộ, nhưng nó sẽ được tốt đẹp để thông báo cho tôi rằng anh ta rất thông minh ...

Ai đó có thể giải thích điều này cho tôi?

+0

bản sao có thể có của [mô hình EF 4.0 lưu dữ liệu vào bộ đệm, và không phát hiện dữ liệu đã sửa đổi.] (Http://stackoverflow.com/questions/3617987/ef-4-0-model-caching-the-data-and- không-phát hiện-sửa đổi-dữ liệu) –

+0

Câu hỏi của bạn được chia thành hai câu hỏi đã được hỏi. Sự cố lưu vào bộ nhớ cache: http://stackoverflow.com/questions/3617987/ef-4-0-model-caching-the-data-and-does-not-detect-the-modified-data/3621477#3621477 Vấn đề ngữ cảnh được chia sẻ : http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling/3653392#3653392 –

+0

Trường hợp của bạn là tĩnh 'DbContext' hay là nó được tạo trên mọi yêu cầu trang? –

Trả lời

0

Bạn "làm mới" như thế nào? Nếu bạn biết một giá trị đã thay đổi, bạn có thể Refresh bối cảnh giá trị lưu trữ sử dụng ServerWins hoặc ClientWins:

http://msdn.microsoft.com/en-us/library/vstudio/bb738618(v=vs.100).aspx

// Resolve the concurrency conflict by refreshing the 
// object context before re-saving changes. 
context.Refresh(RefreshMode.ClientWins, orders); 

Tuy nhiên, câu hỏi thực sự đi xuống đến khi nào và tại sao điều này sẽ xảy ra ở nơi đầu tiên , liên quan đến thời gian suốt đời của ngữ cảnh. Có lẽ bạn có thể sử dụng quá mức bối cảnh tương tự? Hãy nhớ rằng SQL Server và vv có cơ chế bộ nhớ đệm riêng của họ, và do đó Entity Framework không phải là cá duy nhất trong ao của các mục đang cố gắng để làm một số bộ nhớ đệm.

Từ, liên kết sau đây chúng tôi thu thập một số mẹo, nếu bạn đang theo dõi, có thể bạn sẽ không gặp sự cố này. http://msdn.microsoft.com/en-us/data/jj729737.aspx

  • Như bạn nạp nhiều đối tượng, tiêu thụ bộ nhớ của bối cảnh có thể làm tăng nhanh chóng
  • Chances chạy vào vấn đề đồng thời liên quan đến tăng cùng với tuổi thọ mở rộng
  • Khi làm việc với các ứng dụng web, sử dụng một trường hợp bối cảnh mỗi yêu cầu
  • Khi làm việc với Windows Forms, sử dụng một bối cảnh theo mẫu
Các vấn đề liên quan