2014-02-17 4 views
1

У меня есть запрос на загрузку связанного объекта для определенного объекта, но для загрузки данных требуется 5 секунд, что произошло?Entity Framework - связанный объект Perfomance

var rows = clientes.Select(c => new 
     { 
      c.Id, 
      c.Nome, 
      Telefone = String.Format("(0{0}) {1}", c.DDD, c.Telefone), 
      c.Email, 
      Veiculo = (from v in c.Veiculos select new { v.Id, v.Modelo, v.Chassi }), 
     }) 
    .Skip(pageNumber > 1 ? qtdRows * (pageNumber - 1) : 0) 
    .Take(qtdRows) 
    .ToArray(); 
+0

Можете ли вы разместить SQL, который EF отправляет на сервер? –

+0

Как и в стороне, я думаю, вам нужно предложение OrderBy для Skip, чтобы надежно вернуть ожидаемое подмножество сущностей. –

+2

Ну, ваш выбор «Veiculo» вытаскивает таблицу * всего * для * каждой записи, я думаю, это проблема. – James

ответ

2

Кажется, что вы присоединяетесь к двум объектам, но не используете фильтр, чтобы получить Veiculos текущих клиентов.

Может быть, вы должны использовать что-то вроде

var rows = clientes.Select(c => new 
     { 
      c.Id, 
      c.Nome, 
      Telefone = String.Format("(0{0}) {1}", c.DDD, c.Telefone), 
      c.Email, 
      Veiculo = (from v in c.Veiculos *where v.ClientId == c.Id* select new { v.Id, v.Modelo, v.Chassi }), 
     }) 
    .Skip(pageNumber > 1 ? qtdRows * (pageNumber - 1) : 0) 
    .Take(qtdRows) 
    .ToArray(); 

Но, более последовательный метод, чтобы добавить свойство навигации Veiculo для лица Клиента и положите объединение таблиц на Entity Framework.

+0

С где это время простоя с 5.60 до 4.68s, в объекте Client у меня есть свойство навигации, например public virtual IList Veiculos {get; задавать; } –

+0

Хмм. Не могли бы вы показать код, который инициализирует клиентов? –

+0

Я использую шаблон хранилища с NInject (DI), во-первых, я получаю клиентов, IList clientes = (from c in _clienteRepository.Get (c => c.CodigoDealer == dealer.Codigo) .Include (v => v.Veiculos) выберите c) .Include (b => b.Beneficios) .ToList() ;, если удалить эту строку (из v в c.Veiculos *, где v.ClientId == c.Id * select new { v.Id, v.Modelo, v.Chassi}), это очень быстро! –

Смежные вопросы