2012-03-13 34 views
12

Tôi đã đọc rằng proxy được sử dụng khi wee cần sử dụng Tải và Theo dõi Lười biếng. Nói cách khác, để sử dụng Lazy Loading, tôi phải kích hoạt proxy.EF 4 - Tải Lười Biếng Không Có Proxies

Cho đến nay rất tốt.

vấn đề là tôi có thể sử dụng mã bên dưới để thiết lập ngữ cảnh để không sử dụng proxy và thậm chí sử dụng tải chậm.

ctx = new SchoolEntities(); 
ctx.ContextOptions.ProxyCreationEnabled = false; 
ctx.ContextOptions.LazyLoadingEnabled = true; 

Thuộc tính ProxyCreationEnabled chỉ liên quan đến proxy theo dõi thay đổi hay tôi thiếu gì đó?

Ai đó có thể giải thích điều này bằng một số chi tiết?

Cảm ơn!

EDIT1

Tôi đang không sử dụng POCO/DbContext. Tôi đang sử dụng một mô hình EF thông thường với ObjectContext. Tôi biết tầm quan trọng của proxy đối với các thực thể POCO liên quan đến theo dõi thay đổi và tải chậm. Tại sao nên sử dụng Proxy trong một mô hình EDMX thông thường?

Trả lời

10

Khi sử dụng thực thể POCO với các tính năng tích hợp của Khuôn khổ thực thể, phải tạo tạo proxy để sử dụng tải chậm. Vì vậy, với các thực thể POCO, nếu ProxyCreationEnabled là sai, thì tải lười sẽ không xảy ra ngay cả khi LazyLoadingEnabled được đặt thành true.

Với một số loại thực thể thừa kế nhất định (đặc biệt là các thực thể lấy được từ EntityObject), điều này không đúng và tải chậm sẽ hoạt động ngay cả khi ProxyCreationEnabled được đặt thành false. Nhưng đừng coi đó là có nghĩa là bạn nên sử dụng các thực thể EntityObject - điều đó sẽ khiến bạn đau hơn.

Cờ ProxyCreationEnabled thường được đặt thành false khi bạn muốn đảm bảo rằng EF sẽ không bao giờ tạo proxy, có thể vì điều này sẽ gây ra sự cố cho loại serialization bạn đang thực hiện.

Cờ LazyLoadingEnabled thường được sử dụng để kiểm soát việc tải lười có xảy ra trên cơ sở ngữ cảnh khi bạn đã quyết định proxy không. Vì vậy, ví dụ, bạn có thể muốn sử dụng proxy để theo dõi thay đổi, nhưng tắt tải chậm.

+0

Tôi sẽ ghi nhớ rằng 'EntityObject' là một" thực thể thừa kế ":) Khi nào bạn bắt đầu đánh dấu nó bằng thuộc tính' [Lỗi thời]? – Slauma

+0

Câu hỏi hay. Mà tôi không thể trả lời bởi vì tôi không biết nếu và khi nào nó sẽ xảy ra. Nhưng chúng tôi đã thảo luận về nó. –

+0

@ajcvickers, cảm ơn bạn đã trả lời, nhưng, trừ khi tôi không hiểu chính xác, tôi nghĩ đã bỏ lỡ phần quan trọng nhất của câu hỏi: nếu tôi đang sử dụng ObjectContext (và không phải DbContext), ProxyCreationEnabled được sử dụng để làm gì? Để bật tính năng Theo dõi thay đổi? Làm thế nào tôi đã nêu trước đây, đây không phải là cho Lazy Loading, vì vậy, nó là gì? – outlookrperson

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