Entity Framework 4 выборочно ленивые свойства загрузки

Можно ли загрузить объект, исключая некоторые свойства? Одно из свойств этого объекта дорого выбрать. Я хотел бы лениво загрузить эту собственность. Это возможно?

Теперь, когда вы прочитали ответ каждого, я дам вам правильный ответ. EF не поддерживает ленивую загрузку свойств. Однако это поддерживает гораздо более сильную концепцию, чем это. Это называется разбиением таблиц, где вы можете сопоставить таблицу с двумя объектами. Скажем, таблица продуктов в базе данных может быть сопоставлена ​​с объектом продукта и объектом ProductDetail. Затем вы можете переместить дорогостоящие поля в объект ProductDetail, а затем создать ассоциацию 1..1 между prodcut и productdetail. После этого вы можете ленить загрузку соединения productdetail только тогда, когда вам это нужно. В моей главе исполнения моей книги у меня есть рецепт. 13-9. Перемещение дорогостоящего имущества другому объекту

Надеюсь, это поможет!

У Джулии Лерман есть статья о том, как разбить таблицу

Со скалярным свойством единственным способом выборочно не загружать определенное свойство является проект в ESQL или L2E:

var q = from p in Context.People select new { Id = p.Id, Name = p.Name // note no Biography }; 

+1 к Дэн; делать это лениво хуже, чем загружать его вперед. Если вы хотите контролировать загрузку, будьте ясными.

стимулы правильные, но будьте осторожны при использовании ленивой загрузки. У вас могут быть проблемы с производительностью, и вы не понимаете, что свойство загружается в определенном месте вашего кода. Это связано с тем, что он загружает данные, когда вы используете свойство

Я предпочитаю использовать явную загрузку. Таким образом, вы знаете, когда они загружаются и где. Вот ссылка, которая дает пример для LoadProperty http://sankarsan.wordpress.com/2010/05/09/ado-net-entity-framework-data-loading-part-2/

Вы также можете использовать Eager Loading с помощью метода Include. Пример здесь: http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework

Учитывая запрос по EntityFramework DbSet, где целевой объект содержит BigProperty и SmallProperty, когда вы пытаетесь получить доступ к SmallProperty без загрузки BigProperty в память:

 //this query loads the entire entity returned by FirstOrDefault() in memory //the execution is deferred during Where; the execution happens at FirstOrDefault db.BigEntities.Where(filter).FirstOrDefault()?.SmallProperty; //this query only loads the SmallProperty in memory //the execution is still deferred during Select; the execution happens at FirstOrDefault //a subset of properties can be selected from the entity, and only those will be loaded in memory db.BigEntities.Where(filter).Select(e=>e.SmallProperty).FirstOrDefault(); 

Поэтому вы можете использовать это поведение только для запроса BigProperty, где он вам действительно нужен, и использовать команды select, чтобы явно фильтровать его везде.

Я тестировал это с помощью функции использования памяти из инструментов диагностики отладки Visual Studio.

  • Как мне сначала разделить мои таблицы в EF Code?
  • EF, включая другие объекты (шаблон общего репозитория)
  • Улучшать имена свойств навигации при обратном проектировании базы данных
  • Отображение представлений базы данных в EF 5.0 Code First w / Migrations
  • Шаблон модели данных Entity Data (EDMX) с Visual Studio 2010 с пакетом обновления 1 (SP1) и ADO.NET Entity Framework 4.1
  • Ключевое слово не поддерживается: 'server'
  • Entity framework 4.3 запускает миграцию при запуске приложения
  • Считаете ли вы целесообразным перейти на Entity Framework?
  • Принудительно использовать код для инициализации несуществующей базы данных?
  • Группирование команд DB в Entity Framework 4.0
  • свойство навигации должно быть виртуальным - не требуется в ef core?
  • Давайте будем гением компьютера.