ASP.NET MVC 2 и AutoMapper - анализ и загрузка информации о загруженных файлах с помощью AutoMapper - PullRequest
0 голосов
/ 19 мая 2011

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

У меня есть модель ввода / редактирования, которую я планирую использоватьс поддерживаемым EF4 сайтом MVC 2.Модель выглядит следующим образом:

public class AdminGameEditModel
{
    [Required]
    public int GameID { get; set; }

    [Required(ErrorMessage="A game must have a title")]
    public string GameTitle { get; set; }

    [Required(ErrorMessage="A short URL must be supplied")]
    public string ShortURL { get; set; }

    [Required(ErrorMessage="A box art image must be supplied")]
    public HttpPostedFileBase BoxArt { get; set; }

    [Required(ErrorMessage="A large image for the index page is required")]
    public HttpPostedFileBase IndexImage { get; set; }

    [Required(ErrorMessage="A game must have a review")]
    public string ReviewText { get; set; }

    [Required(ErrorMessage="A game must have a score")]
    public int ReviewScore { get; set; }

    [Required(ErrorMessage="A game must have at least one Pro listed")]
    public string[] Pros { get; set; }

    [Required(ErrorMessage="A game must have at least one Con listed")]
    public string[] Cons { get; set; }

    [Required(ErrorMessage="A game must belong to a genre")]
    public int GenreID { get; set; }

    [Required(ErrorMessage="A game must be associated with at least one platform")]
    public int[] PlatformIDs { get; set; }
}

Я бы хотел сопоставить ее с сущностью Game для создания / обновления.Однако есть загвоздка - мне нужно сохранить изображения в определенной папке, а затем взять их пути и сохранить эти в качестве свойств моей сущности.Итак, пример для ясности: вместо того, чтобы моя сущность Game имела реальное изображение BoxArt, вместо этого у него был бы путь к правильному изображению BoxArt.Я надеюсь это имеет смысл.Дайте мне знать, если мне нужно уточнить.

Могу ли я сделать это с AutoMapper?Если да, может ли кто-нибудь предоставить руководство по коду?


РЕДАКТИРОВАТЬ:

Отчасти проблема заключается в том, что моя модель довольно сложна, поскольку содержит отношение «многие ко многим».PlatformID в конечном итоге используются для создания / перестройки (в зависимости от того, создаю я или обновляю сущность) связанных сущностей Platform на карте Game / Platform.Я не уверен, что AutoMapper может сделать что-то такое сложное без необходимости проходить через мой репозиторий.

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

if (BoxArt.ContentLength > 0) {
    var fileName = Path.GetFileName(BoxArt.FileName);
    var path = Path.Combine(Server.MapPath("~/Content/Images/BoxArt"), fileName);
    BoxArt.SaveAs(path);
}

Итак, то, что я ищу, является более сложным, чем просто попытка отобразить простые свойства между объектами,Я хотел бы сохранить ссылку на мою модель редактирования из моего хранилища.Разделение проблем и все такое.Из-за этого мне нужно сопоставить объект, прежде чем я попытаюсь передать его в репозиторий для сохранения.Я просто не уверен, как это сделать, не смешивая слои приложения.

1 Ответ

2 голосов
/ 21 мая 2011

Если я вас понимаю, все, что вам нужно сделать, это сначала обновить ваши свойства перед вызовом AutoMapper.

Убедитесь, что ваш объект имеет правильные значения, прежде чем вызывать AutoMapper.

После вызова сопоставления вашему целевому объекту будут скопированы все соответствующие свойства.

Опубликуйте еще немного кода, если это не отвечает квесту.

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