2011-09-05 35 views
6

Tôi đang cố triển khai mẫu đệm có thể cần sử dụng Redis. Vấn đề với mẫu này là tôi cần phải tắt Configuration.ProxyCreationEnabled và sau đó kích hoạt lại nó sau đó để tránh bất kỳ vấn đề nào trên một trang trại.Truy cập DbContext từ IQueryable

Điều tôi muốn làm là truy cập DbContext từ IQueryable để tôi có thể thực hiện việc này một lần thay vì ở mọi nơi. Cách dễ nhất để làm điều này là để vượt qua DbContext đang được sử dụng vào phần mở rộng bộ nhớ đệm của tôi, tuy nhiên tôi đã xem qua bài viết này:

Access DataContext behind IQueryable

Có một cách để truy cập vào DbContext trong một cách tương tự như liên kết ở trên sử dụng EF 4.1 Code Fist (DbSet's, vv)?

Tôi đã cố gắng tự mình tìm kiếm nhưng đã phải vật lộn để tìm lớp cơ sở từ DbSet được tham chiếu trong IQueryable bằng cách sử dụng sự phản chiếu.

Trả lời

5

Giải pháp được đề cập trong Access DataContext behind IQueryable là bản hack và không nên được sử dụng. Nó dựa vào tên của một biến thành viên riêng trong lớp thực thi IQueryable. Điều này có nghĩa là lớp thực hiện có thể thay đổi trong bản phát hành EF/.NET Framework trong tương lai và phá vỡ mã của bạn. Vì DbContext không thể truy cập được thông qua giao diện IQueryable, bạn nên chuyển nó vào phần mở rộng bộ nhớ đệm của bạn để tránh việc đưa ra các giả định về việc triển khai IQueryable. Làm như vậy cũng sẽ rõ ràng hơn thiết lập sự phụ thuộc vào DbContext trong giao diện bộ nhớ đệm của bạn, thay vì chôn nó trong việc thực hiện.

+0

Cảm ơn vì điều đó. Đã đến một kết luận tương tự, nhưng đã nghĩ rằng nó sẽ là tốt đẹp để trừu tượng việc thực hiện. – didiHamman

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