MVC ViewModels и запросы Entity Framework

Я новичок как в MVC, так и в Entity Framework, и у меня есть вопрос о правильном / предпочтительном способе сделать это.

Я как бы слежу за приложением Nerd Dinner MVC, когда пишу это приложение. У меня есть страница с данными из нескольких разных мест. Он показывает детали, которые поступают из нескольких разных таблиц, а также имеет раскрывающийся список из таблицы поиска.

Я создал класс ViewModel, который содержит всю эту информацию:

class DetailsViewModel {
    public List<Foo> DropdownListData { get; set; }

    // comes from table 1
    public string Property1 { get; set; } 
    public string Property2 { get; set; }

    public Bar SomeBarObject { get; set; } // comes from table 2
}

В коде Nerd Dinner их примеры немного слишком упрощенно. Модель DinnerFormViewModel принимает одну сущность: Dinner. На основе Dinner он создает список SelectList для стран в зависимости от местоположения ужина.

Из-за простоты их код доступа к данным также довольно прост. У него есть простой DinnerRepository с методом GetDinner (). В своих методах действий он может делать простые вещи, например:

Dinner dinner = new Dinner();

// return the view model
return View(new DinnerFormViewModel(dinner));

ИЛИ

Dinner dinner = repository.GetDinner(id);

return View(new DinnerFormViewModel(dinner));

Мой запрос намного сложнее, чем этот, извлечение из нескольких таблиц ... создание анонимного типа:

var query = from a in ctx.Table1
            where a.Id == id
            select new { a.Property1, a.Property2, a.Foo, a.Bar };

Мой вопрос следующий:

Как должен выглядеть мой класс репозитория? Должен ли класс репозитория возвращать саму ViewModel? Это не похоже на правильный способ делать что-то, поскольку ViewModel подразумевает, что он используется в представлении. Поскольку мой запрос возвращает анонимный объект, как мне вернуть его из моего репозитория, чтобы я мог построить ViewModel в своих действиях контроллера?

19
задан Greg Sansom 29 June 2012 в 05:40
поделиться