При создании экземпляра DbContext EntityFramework в MVC3 читается ли вся база данных? При отладке можно получить доступ ко всем данным во всей базе данных, посмотрев на экземпляр DbContext, так что это не означает, что все данные захватываются при первом соединении?Создает ли экземпляр DbContext из EF всю базу данных?
ответ
Определенно нет. Данные загружаются при доступе к свойствам DbSet/ObjectSet вашего DbContext.
Только данные, которые вы запрашиваете, загружаются из базы данных и отображаются на объекты. Например, при запросе, как
DbContext.Table.Where(row => row.Prop1 == "Value")
его переведённая на SQL, оцененных в базе данных, и только строки, которые соответствуют вашему запросу возвращаются в ваше приложение.
Нет, вся база данных не читается при создании экземпляра. Коллекции сущностей (DbSet <>) в вашем DbContext оцениваются лениво. Поэтому, когда вы отлаживаете и перемещаетесь в один, он запрашивается тогда, а не когда экземпляр DbContext создается.
Нет, Entity Framework пытается запрашивать базу данных только тогда, когда вам нужна информация, или вам необходимо изменить информацию.
Следующий пример - моя личная интерпретация того, что я думаю, что EF делает за кулисами. Это, вероятно, несколько неточно, но служит для иллюстрации.
using(var db = new MyDbContext()) // 1
{
var entities = db.MyEntities; // 2
foreach(var entity in entities) // 3
{
// 4
} // 5
} // 6
- Установить соединение с базой данных
- Получить какой-либо объект, представляющий запрос, который говорит: «Вытащи меня все дем сущности.»
- Перечислите объект. Aka, предложите провайдеру запроса контекста «заставьте меня все деметировать» (предположим sql) «выберите * из MyEntity с (nolock);» и запустите запрос, возвращающий ADO.NET SqlDataReader, который будет читать первую строку, сопоставьте объект в (необязательно) ленивый объект с некоторыми метаданными, поэтому EF знает, к какой строке он привязан, и т. д., и yeild, который является переменной «entity».
- Сделайте что-нибудь с сущностью, которую вы волшебным образом получили от базы данных, фактически не выполнив никакой реальной работы (спасибо Entity Framework!)
- Попросите EF переместить SqlDataReader в следующую строку и предоставить другую сущность (ака, вернитесь к шагу 3, но только если существует другая строка)
- Закройте соединение с базой данных.
- 1. EF не создает базу данных
- 2. Где EF создает мою базу данных? Если это.
- 3. Что такое генератор dbcontext в EF 6
- 4. Создает ли EF модель памяти в базе данных каждый раз, когда я создаю новый DbContext?
- 5. Может ли grep всю базу данных?
- 6. Заблокировать всю базу данных?
- 7. Persistence.createEntityManagerFactory очистить всю базу данных
- 8. Sitecore MongoDB не создает всю базу данных/коллекции
- 9. указать базу данных для DbContext
- 10. EF DbContext и StructureMap обзорное
- 11. EF 6, добавление объекта в DbContext создает повторяющийся объект
- 12. Обновить всю базу данных
- 13. Использует ли MySQL foreign_key_checks всю базу данных?
- 14. EF-миграции: создание экземпляра DbContext
- 15. EF Миграция не может найти базу данных
- 16. Refresh EF 6 DbContext
- 17. Репозиторий EF DBContext
- 18. Шифровать всю базу данных Rails
- 19. Заблокировать всю базу данных mysql из hibernate
- 20. Запросить всю базу данных доступа из Excel
- 21. Могу ли я получить всю базу данных застройки из foursquare?
- 22. Entity Framework читает запросы, блокирующие всю базу данных
- 23. Singleton Scope для DbContext EF
- 24. MVC DbContext вытащить всю модель
- 25. Включает ли EF объекты между различными экземплярами DbContext?
- 26. EF DbContext incosistency
- 27. Расширение EF DBContext
- 28. EF Core Scaffold DbContext
- 29. Entity Framework 4.3 не создает базу данных
- 30. Как отобразить всю базу данных