Отображение с помощью автомпера - PullRequest
1 голос
/ 30 декабря 2011

У меня есть модель домена:

public class Project
{
    [Key]
    public int ProjectID { get; set; }
    public string Title { get; set; }
    public string Slug { get; set; }
    public string Content { get; set; }
    public string Category { get; set; }
    public string Client { get; set; }
    public int Year { get; set; }
}

У меня есть модель представления (которая является частью вышеуказанной модели):

public class ListProjectsViewModel
{
    public IEnumerable<ProjectStuff> SomeProjects { get; set; }

    public class ProjectStuff
    {
        public int ProjectID { get; set; }
        public string Title { get; set; }
        public string Slug { get; set; }
        public string Content { get; set; }
    }

    // Some other stuff will come here
}

У меня есть контроллер действий:

    public ActionResult List()
    {
        // Get a list of projects of type IEnumerable<Project>
        var model = m_ProjectBusiness.GetProjects();

        // Prepare a view model from the above domain entity
        var viewModel = Mapper.Map..........
        return View(viewModel);
    }

Как я могу закодировать отображение '........' с помощью автоматического средства?

Спасибо.

1 Ответ

3 голосов
/ 30 декабря 2011

Есть два шага.

1) Определить сопоставление с помощью AutoMapper (это обычно делается в каком-либо загрузчике, называемом Global.asax и т. Д.)

// since all of your properties in Project match the names of the properties
// in ProjectStuff you don't have to do anything else here
Mapper.CreateMap<Project, ListProjectsViewModel.ProjectStuff>();

2) Сопоставьте объект в вашем контроллере:

// Get a list of projects of type IEnumerable<Project>
var projects = m_ProjectBusiness.GetProjects();

// Prepare a view model from the above domain entity
var viewModel = new ListProjectsViewModel
{
    SomeProjects = Mapper.Map<IEnumerable<Project>, IEnumerable<ListProjectsViewModel.ProjectStuff>>(projects)
};

return View(viewModel);

Здесь следует отметить, что вы определяете отображение между Project и ProjectStuff.То, что вы пытаетесь сопоставить, это список проектов (IEnumerable) со списком ProjectStuff (IEnumerable).AutoMapper может сделать это автоматически, поместив это в общие аргументы, как я делал выше.Ваша модель представления, которую использует ваше представление, оборачивает ваш список ProjectStuff, поэтому я просто создаю новый ListProjectsViewModel и выполняю сопоставление внутри него.

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