Добрый день.
Мой вопрос в том, что у меня есть 2 метода редактирования в моем контроллере - получить и опубликовать.
[HttpGet]
public async Task<IActionResult> Edit(Guid id)
{
var article = await _articleService.GetArticleAsync(id);
var resultModel = _mapper.Map<ArticleDetailViewModel>(article);
return View(resultModel);
}
[HttpPost]
public async Task<IActionResult> Edit(ArticleDetailViewModel model)
{
await _articleService.UpdateArticle(_mapper.Map<ArticleDTO>(model));
return RedirectToAction("Index", "Article");
}
Идентификатор Guid статьи входит в метод Edit get. С этим идентификатором я нахожу весь объект ArticleDTO и использую автосопоставление, чтобы превратить его в ArticleDetailViewModel. Далее я передаю эту модель в представление. В методе публикации Index изменения в статье редактируются и сохраняются с помощью метода UpdateArticle(ArticleDTO). В этом методе я должен вручную собрать одну сущность из 2-х сущностей и сохранить ее.
public async Task UpdateArticle(ArticleDTO model)
{
var entity = await _unitOfWork.Articles.GetByIdAsync(model.Id);
var articleResult = new Article()
{
Id = model.Id,
Title = model.Title,
Description = model.Description,
Body = model.Body,
CreationDate = model.CreationDate,
PositivityGrade = entity.PositivityGrade,
Comments = entity.Comments,
Source = entity.Source,
SourceId = entity.SourceId
};
_unitOfWork.Articles.Update(articleResult);
await _unitOfWork.Comit();
}
Подскажите пожалуйста, как этого избежать, и использовать Automapper, чтобы не делать это вручную. Или, может быть, есть какой-то другой способ.
@ScottMildenberger, к сожалению, проблема именно в этом. В контроллере получаю модель ArticleDetailViewModel с полями Id, Title, Description, Body, CreationDate в методе Edit post. Остальные поля пустые или по умолчанию. Поэтому мне приходится искать исходный объект в методе UpdateArticle (ArticleDTO) и вручную сопоставлять некоторые поля, которые я не меняю в форме.





Я думаю, это может быть то, что вы хотите:
public async Task UpdateArticle(ArticleDTO model)
{
var entity = await _unitOfWork.Articles.GetByIdAsync(model.Id);
var articleResult = _mapper.Map(model, entity)
_unitOfWork.Articles.Update(articleResult);
await _unitOfWork.Comit();
}
вместо того, чтобы иметь переменную articleResult, почему бы просто не обновить соответствующие свойства переменной объекта и передать это методу Update(). Вы можете настроить AutoMapper для этого или сделать это вручную.