Как AutoMapper должен получить доступ к моему DAL?

#asp.net-mvc #fluent-nhibernate #automapper #loose-coupling

#asp.net-mvc #свободно-nhibernate #automapper #слабая связь

Вопрос:

У меня есть свойство InvoiceInputModel with ProjectId , которое является ссылкой на Project сущность. В идеале, я хочу, чтобы AutoMapper мог отображать всю Invoice сущность из InvoiceInputModel , которая выглядит следующим образом:

 public class InvoiceInputModel
{
    public Guid Id { get; set; }
    public DateTime Date { get; set; }
    public string Reference { get; set; }
    public Guid ProjectId { get; set; }
}
  

Очевидно, что следующее плохо:

 Mapper.CreateMap<InvoiceInputModel, Invoice>()
    .ForMember(src => src.Project, opt => opt.MapFrom(
        dest => _unitOfWork.CurrentSession.Get<Project>(dest.ProjectId)
    )
);
  

Как мне сообщить AutoMapper, который invoice.Project должен быть сопоставлен с Project объектом, основанным на ProjectId свойстве в InvoiceInputModel , сохраняя при этом слабую связь?

Счет / Редактирование в моем InvoiceController :

 [HttpPost]
[Authorize]
public ActionResult Edit(InvoiceInputModel invoiceInputModel)
{
    var invoice = _unitOfWork.CurrentSession.Get<Invoice>(invoiceInputModel.Id);

    Mapper.Map<InvoiceInputModel, Invoice>(invoiceInputModel, invoice);

    invoice.Project = _unitOfWork.CurrentSession.Get<Project>(invoiceInputModel.ProjectId);
    // I want AutoMapper to do the above.

    _unitOfWork.CurrentSession.SaveOrUpdate(invoice);
    _unitOfWork.Commit();

    return View(invoice);
}
  

Я заметил кое-что о «Распознавателях» и ResolveUsing, но у меня нет опыта их использования.

Как мне сказать AutoMapper сделать это, сохраняя слабую связь между моими моделями сущностей, моделями ввода и моделями просмотра? Или есть способ получше?

Ответ №1:

Как мне сообщить AutoMapper об этом счете.Проект должен быть сопоставлен с объектом Project на основе свойства ProjectID в InvoiceInputModel, сохраняя при этом слабую связь?

Вы не можете. Если AutoMapper отправляется куда-то еще для извлечения данных, то он не является свободно связанным.

Вы все равно не изменяете Project в этом конкретном представлении — зачем вам нужно устанавливать отношение на Project , разве NHibernate недостаточно умен, чтобы видеть, что свойство не изменилось, и ничего не делать?

Ответ №2:

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

http://sprokhorenko.blogspot.com/2011/03/bind-to-entity-id.html