2010-04-04 31 views
8

Tôi đã đọc Khung thực thể và mọi người đã khóc vì sao không tải xuống ẩn hoặc một cái gì đó tiềm ẩn. Về cơ bản tôi đã tìm kiếm những thứ về Lazy Loading và bây giờ tôi biết nó là gì: Nó là một mẫu thiết kế cho phép chúng ta tải các đối tượng khi chúng thực sự cần thiết.Tải Lười biếng rõ ràng so với tải Lấp lánh rõ ràng

Nhưng sự khác biệt giữa Rõ ràng Tải xuống Lặng và Ngụ ý Tải Lười.

Cảm ơn trước ...

Trả lời

5

Nếu bạn, ví dụ: có một thực thể "OrderRow" và một thực thể khác "Order", sẽ có một tài sản điều hướng trên OrderRow trỏ đến Order nó thuộc về.

Hiện nay Entity Framework chỉ hỗ trợ Explicit Lazy tải có nghĩa là nếu bạn đã truy xuất một số OrderRows và muốn kiểm tra một cái gì đó trên theo thứ tự bạn cần phải:

// or is an OrderRow 
if(!or.Order.IsLoaded) 
    or.Order.Load() 

or.Order.Cancel(); 

Tuy nhiên nếu bạn có ngầm tải chậm bạn không cần kiểm tra IsLoaded, nó sẽ được thực hiện tự động, bạn có thể làm or.Order.Cancel() trực tiếp và thứ tự sẽ được nạp tự động nếu cần thiết. Đây là cách linq-to-sql hoạt động và nó tiết kiệm một số đánh máy và một số rủi ro cho những sai lầm. Mặt khác, nó làm cho nó ít rõ ràng hơn khi nào và cách truy cập cơ sở dữ liệu sẽ được thực hiện như thế nào. Với tải ngầm, thật dễ dàng để viết mã không hiệu quả làm cho một vòng tròn DB cho mỗi dòng được lấy từ một bảng.

+0

Vì vậy, bạn có nghĩa là tải lười biếng rõ ràng là bắt buộc đối với các bảng có liên quan? – Tarik

+0

Không, tải ngầm nghĩa là các bảng liên quan sẽ tự động được tải trong nền. –

+0

.. giống như ở phía trước. Việc thực hiện sẽ chặn cho đến khi nó được tìm nạp. –

4

Explicit có nghĩa là bạn đã viết một cách rõ ràng mã của bạn để tải lười biếng.

Ngụ ý có nghĩa là khuôn khổ (trong trường hợp này EF) không tải bản thân, cho dù bạn có dự định hay không.