У меня есть проект AspNet WebApi 2, и мне нужно сопоставить класс запроса с классом сущности.
Итак, у меня есть эти коды:
Класс запроса:
Класс, представляющий запрос только с идентификаторами подклассов и другими типами данных.
public class TicketRequest
{
public int IdTicket { get; set; }
//I want to use those ids to get the full entity from repo !!!
public int IdStatusTicket { get; set; }
public int IdUsuarioCliente { get; set; }
public int idCategoria { get; set; }
public int idClassificacao { get; set; }
public string Titulo { get; set; }
public string Descricao { get; set; }
public DateTime? DataHoraInicial { get; set; }
public DateTime? DataHoraAlteracao { get; set; }
public DateTime? DataHoraUltimaMensagem { get; set; }
public DateTime? DataHoraFinal { get; set; }
}
Класс сущности:
Класс, представляющий мой основной класс сущности со всеми подклассами.
public class Ticket
{
public Ticket()
{
StatusTicket = new StatusTicket();
UsuarioCliente = new UsuarioCliente();
Categoria = new Categoria();
Classificacao = new Classificacao();
}
public int IdTicket { get; set; }
//Here are the subclasses which I want to load from repo !!!
public StatusTicket StatusTicket { get; set; }
public UsuarioCliente UsuarioCliente { get; set; }
public Categoria Categoria { get; set; }
public Classificacao Classificacao { get; set; }
public string Titulo { get; set; }
public string Descricao { get; set; }
public DateTime? DataHoraInicial { get; set; }
public DateTime? DataHoraAlteracao{ get; set; }
public DateTime? DataHoraUltimaMensagem { get; set; }
public DateTime? DataHoraFinal { get; set; }
}
Как я уже говорил, я хочу сопоставить первый класс с последним.
Итак, я ожидаю автоматической загрузки всех подклассов внутри сущности Ticket, например, Категории,
* 1018.* После некоторого времени поиска я нашел идею создания
профиля и
resolver для всех свойств (подклассов) внутри моего основного объекта Ticket.
Для теста, Я просто реализую один подкласс, чтобы увидеть, работает ли он, и ниже есть реализация, которая получает сущность категории из репозитория и загружает свойство категории, внутри сущности Ticket.
Resolver:
ЗдесьУ меня есть класс резолвера,вызов метода бизнес-уровня (внедренный).Я использую MVC.Unit5 для управления моим DI.
public class CategoriaResolver : IValueResolver<TicketRequest, Ticket, Categoria>
{
private ICategoriaBusiness _business;
public CategoriaResolver(ICategoriaBusiness business)
{
_business = business;
}
Categoria IValueResolver<TicketRequest, Ticket, Categoria>.Resolve(TicketRequest source, Ticket destination, Categoria destMember, ResolutionContext context)
{
return _business.Get(source.idCategoria);
}
}
Профиль:
Здесь у меня есть класс профиля, чтобы сделать преобразование из TicketRequest в Ticket, вызывая класс распознавателя.
public class TicketRequestToDomainMappingProfile : Profile
{
public TicketRequestToDomainMappingProfile()
{
CreateMap<TicketRequest, Ticket>()
.ForMember(d => d.Categoria, opt => opt.MapFrom<CategoriaResolver>());
}
}
И, наконец, здесь я регистрирую класс профиля в Automapper:
public static class AutoMapperConfig
{
public static void RegisterMappings()
{
Mapper.Initialize(map =>
{
map.AddProfile<DomainToDTOMappingProfile>();
map.AddProfile<DTOToDomainMappingProfile>();
map.AddProfile<TicketRequestToDomainMappingProfile>();
});
}
}
Контроллер:
В моем контроллере у меня есть это:
[HttpPost]
public IHttpActionResult Insert([FromBody]TicketRequest request)
{
try
{
...
var entity = Mapper.Map<TicketRequest, Ticket>(request); (*)
int identity = _business.Insert(entity);
...
В строке (*) я вызываю сопоставление, но оно не работает, и я получаю эту ошибку:
Типы сопоставления ошибок.
Типы сопоставления:TicketRequest -> Ticket Atendimento.Entities.Request.TicketRequest -> Atendimento.Entities.Entities.Ticket
Тип Конфигурация карты: TicketRequest -> Ticket Atendimento.Entities.Request.TicketRequest -> Aоприятия.Предложения
Назначение Участник: Категория
Я сомневаюсь, чего мне не хватает?Я делаю правильное отображение?
Идея была получена из этих URL https://social.technet.microsoft.com/wiki/contents/articles/51043.automapper-handling-profile-dependencies-using-custom-value-resolvers.aspx и http://docs.automapper.org/en/stable/8.0-Upgrade-Guide.html
С уважением.