Прошу прощения, если мой вопрос нормальный. Но я встречаю эту проблему, когда я разработка ASP.NET MVC моего 4.0 приложения с использованием Entity Framework 5.Entity Framework 5: Использование ленивых загрузок или ускоренная загрузка
Если я выбираю жадную загрузку, я просто упростить с помощью:
public Problem getProblemById(int id) {
using(DBEntity ctx = new DBEntity())
{
return (Problem) ctx.Posts.Find(id);
}
}
Но если я использую жадную загрузку, я столкнутся с проблемой: когда я хочу перемещаться по всем ее атрибутам, таким как комментарии (проблемы), User (of Problem) ... Я должен вручную использовать Include
, чтобы включить эти свойства. и иногда, если я не использую эти свойства, я потеряю производительность, и, возможно, я потерял силу Entity Framework.
Если я использую Lazy Loading. Существует два способа использования объекта DBContext
. Первый способ использует объект DbContext локально:
public Problem getProblemById(int id) {
DBEntity ctx = new DBEntity();
return (Problem) ctx.Posts.Find(id);
}
Используя это, я думаю, что будет соответствовать утечка памяти, потому что CTX никогда не выбрасывайте снова.
Второй способ сделать DbContext объект статический и использовать его во всем мире:
static DBEntity ctx = new DBEntity();
public Problem getProblemById(int id) {
return (Problem) ctx.Posts.Find(id);
}
Я читал некоторые блог, они говорят, что, если я использую этот путь, я должен контролировать доступ параллелизмом (поскольку мульти запрос отправляет на сервер) сам, OMG. Например, эта ссылка:
Entity Framework DBContext Usage
Итак, как спроектировать мое приложение, пожалуйста, помогите мне разобраться.
Спасибо :)
так, если я использую Lazy Loading. Как я могу создать приложение для использования объекта DBContext? Спасибо :) – hqt
Я вижу много сообщений (включая ссылку MSDN), которые рекомендуют не использовать ленивую загрузку.Итак, почему у microsoft все еще есть выбор для программистов :(и они не вносят никаких изменений, чтобы упростить его использование :( – hqt
@hqt Использование ленивой загрузки или нет не изменит способ использования самого DBContext; все еще нужно найти способ создания нового экземпляра для каждого пользовательского запроса. Простым подходом является создание экземпляра DBContext в конструкторе каждого контроллера и передача его на бизнес-уровень. Более надежный подход заключается в том, чтобы автоматически использовать структуру IoC введите экземпляр контекста в каждый конструктор контроллера, используя инъекцию зависимостей. См. http://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-plus-Ntiti, например – ken2k