Как AutoMapper должен получить доступ к моему DAL? - PullRequest
1 голос
/ 12 апреля 2011

У меня есть 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 при сохранении слабой связи?

Invoice / Edit в моем 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);
}

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

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

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

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

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

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

0 голосов
/ 12 апреля 2011

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

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

...