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

У меня есть InvoiceInputModel со свойством 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 сделать это, сохраняя при этом слабую связь между моими моделями сущностей, входными моделями и моделями просмотра? Или есть лучший способ?


person Petrus Theron    schedule 12.04.2011    source источник


Ответы (2)


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

Вы не можете. Если AutoMapper собирается извлекать данные из какого-то другого места, то это не является слабосвязанным.

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

person RPM1984    schedule 12.04.2011

Лично у меня есть сущности в моделях просмотра вместо идентификаторов, так что привязка происходит автоматически.

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

person queen3    schedule 12.04.2011