Неявная Ленивая Загрузка против Явной Ленивой Загрузки - PullRequest
9 голосов
/ 04 апреля 2010

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

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

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

Ответы [ 2 ]

5 голосов
/ 04 апреля 2010

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

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

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

or.Order.Cancel();

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

4 голосов
/ 04 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...