MVC более конкретные модели должны быть заполнены более точным запросом тоже? - PullRequest
1 голос
/ 27 марта 2010

Если у вас есть модель автомобиля с примерно 20 свойствами (и несколькими объединениями таблиц) для страницы carDetail, тогда ваш запрос LINQ to SQL будет довольно большим.

Если у вас есть страница carListing, которая использует менее 5 свойств (все из 1 таблицы), то вы используете модель CarSummary. Нужно ли заполнять модель CarSummary по тому же запросу, что и модель Car?

Или вам следует использовать отдельный запрос LINQ to SQL, который был бы более точным?

Я просто думаю о производительности, но LINQ все равно использует ленивую загрузку, поэтому мне интересно, является ли это проблемой или нет.

Ответы [ 3 ]

2 голосов
/ 27 марта 2010

Создание моделей просмотра для представления различных необходимых вам проекций, а затем используйте выбранную проекцию следующим образом.

from c in Cars
select new CarSummary
{
    Registration = c.Registration,
    ...
}

Это создаст запрос, который только выберет необходимые свойства.

отношения будут разрешены, если они представлены в диаграмме контекста данных (dbml)

select new CarSummary
{
     OwnerName = c.Owner.FirstName
}

Также вы можете вкладывать объекты внутрь проекции

select new CarSummary
{
     ...
     Owner = new OwnerSummary
     {
         OwnerName = c.Owner.FirstName, 
         OwnerAge = c.Owner.Age
     }
     ...
}

Если вы используете одну и ту же проекцию во многих местах, полезно написать следующий метод, чтобы проекция происходила в одном месте.

public IQueryable<CarSummary> CreateCarSummary(IQueryable<Car> cars)
{
    return from c in cars
           select new CarSummary
           {
               ...
           }
}

Это может быть использовано, как это необходимо

public IQueryable<CarSummary> GetNewCars()
{
     var cars = from c in Cars
                select c;

     return CreateCarSummary(cars);

}
0 голосов
/ 27 марта 2010

Если производительность на самом деле является проблемой или проблемой, вам следует выполнить отдельный запрос проекции linq, чтобы запрос sql выбирал только 5 полей, необходимых для заполнения модели представления, а не возвращал все 20 полей.

0 голосов
/ 27 марта 2010

Я думаю, что в вашем случае ленивая загрузка не приносит большой пользы, так как вы собираетесь использовать 1 свойство из каждой таблицы, поэтому рано или поздно для отображения страницы вам придется выполнить все объединения. На мой взгляд, вы можете использовать тот же запрос и конвертировать из модели Car в модель CarSummary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...