Я пытаюсь отладить проблемы с производительностью в более старом приложении MVC, используя EF 5 (4.4). SQL Server Profiler показывает, как выполняется больше запросов, чем должно быть. Похоже, что EF генерирует запросы для каждой связанной сущности с рассматриваемой моделью.
Теперь это звучит как ленивая загрузка. Дело в том, что никакие свойства навигации нигде в коде не упоминались (по крайней мере, явно).
Когда я отключаю ленивую загрузку для контекста, он исправляет это. Кроме того, если я возвращаю что-то отличное от модели (например, модель представления), это исправляет это. Это старое, плохо реализованное приложение MVC, и в любом случае оно должно использовать модели представления, так что все в порядке. Любое из этих исправлений приемлемо, но я все равно хочу знать, почему это происходит.
Я читал, что свойства навигации могут вызываться при сериализации объекта. Это то, что здесь происходит? Если да, можете ли вы объяснить, почему объект сериализуется? (Отметим, что мое понимание сериализации очень простое - в основном то, что сказано здесь.)
Вот пример:
Контроллер
[HttpGet]
public ViewResult StoreInfo(int id)
{
Store model = _posRepository.GetStore(id);
return View(model);
}
Репозиторий
public Store GetStore(int storeID)
{
return _dbContext.Store.Single(x => x.StoreID == storeID);
}
Модель
public partial class Store // highly simplified version
{
public int StoreID { get; set; }
public string StoreName { get; set; }
public Nullable<int> StateID { get; set; }
public virtual States State { get; set; } // lazy loaded
}
Просмотреть
// blank
Json(model)
, поэтому проблема в другом. - person Sergey Litvinov   schedule 19.02.2015Console.WriteLine
вызовов в методе доступа к свойствам. Он пишет в конец dotnetfiddle, и, как вы видите, доступ к свойствуState
во время рендеринга представления не производился. - person Sergey Litvinov   schedule 19.02.2015