2010-04-04 5 views
8

Я читал Entity Framework, и люди плакали, почему не было никакой неявной ленивой загрузки или чего-то еще. В основном я искал информацию о Lazy Loading, и теперь я знаю, что это такое: это шаблон дизайна, который позволяет нам загружать объекты, когда они действительно нужны.Implicit Lazy Loading vs Explicit Lazy Loading

Но в чем разница между Явного Ленивой Загрузкой и неявной Ленивой Загрузкой.

Заранее спасибо ...

ответ

5

Если вы, например. иметь сущность «OrderRow» и другое лицо «Заказ», будет навигационное свойство на OrderRow, которое указывает на заказ, которому он принадлежит.

В настоящее время Entity Framework поддерживает только Явный Ленивый нагрузки, что означает, что если вы retreived ряд OrderRows и хотите проверить что-то на заказ, Вы должны:

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

or.Order.Cancel(); 

Однако если у вас есть неявное ленивая загрузка вам не нужна проверка IsLoaded, это будет сделано автоматически, вы можете сделать or.Order.Cancel() напрямую, и Заказ будет загружен автоматически, если потребуется. Вот как работает linq-to-sql, и это экономит некоторую типизацию и некоторый риск для ошибок. С другой стороны, это делает менее понятным, когда и как будет осуществляться доступ к базе данных. При неявной нагрузке легко написать неэффективный код, который делает одну транзакцию DB для каждой строки, которая будет извлекаться из таблицы.

+0

Значит, вы подразумеваете, что для связанных таблиц требуется явно ленивая загрузка? – Tarik

+0

Нет. Неявная загрузка означает, что связанные таблицы автоматически загружаются в фоновом режиме. –

+0

.. больше похоже на передний план. Выполнение будет заблокировано до тех пор, пока оно не будет извлечено. –

4

Явные означает, что вы явно написали код для ленивой нагрузки.

Неявное означает, что каркас (в данном случае EF) выполняет ленивую загрузку самостоятельно, независимо от того, планируете вы это или нет.