Many-to-Many com EF COre e AutoMapper

09/04/2020

0

Pessoal, tenho a seguinte situação aqui.
Tenho duas entidades, Treinamento e Departamento, sendo que o relacionamento delas é many to many e eu tenho uma terceira classe chamada TreinamentoDepartamento que trata isso.
Usei AutoMapper para realizar o mappeamento das entidades para DTOs que criei delas.
Quando realizo um POST com um JSON como esse:

{
    "titulo": "teste",
    "urlVideo": "teste",
    "urlArquivo": "teste",
    "departamentos": [
      {
        "nome": "TI",
        "treinamentos": []
      },
      {
        "nome": "CSA",
        "treinamentos": []
      }
    ]
}


Eu recebo um TreinamentoDTO certinho, com os respectivos departamentos encapsulados na propriedade de lista de departamentoDTO.
Ocorre que, quando realizo o mapeamento para a entidade Treinamento, eu perco essas referências sobre o departamento.
Minha classe/entidade Treinamento NÃO tem uma lista de departamentos, ela tem a já citada lista de TreinamentoDepartamento, que fica vazia quando é realizado esse mapeamento com o automapper.
Minha dúvida é, como devo salvar os departamentos contidos no treinamento?
Meu mappeamento não está funcionando corretamente e eu deveria inserir tudo no banco com um simples context.Treinamento.Add(treinamento) ou devo extrair os departamentos da TreinamentoDTO para uma variável e então salvar usando meu contexto?
Abaixo está o GIST com as classes citadas, se faltou algo, é só me avisar.

https://gist.github.com/christianmlima/02714ccb82fa5375d9f0479c02825c28
Christian

Christian

Responder

Posts

27/12/2020

Stella Oliveira

Seu mapper está tendo um looping, é só isso, eu faria dessa forma:

public class Treinamento
{
    public int Id { get; set; }
    public string Titulo { get; set; }
    public string UrlVideo { get; set; }
    public string UrlArquivo { get; set; }
    public List<TreinamentoDepartamento> TreinamentoDepartamentos { get; set; }
}
    
public class Departamento
{
    public int Id { get; set; }
    public string Nome { get; set; }
    public List<Usuario> Usuarios { get; set; }
    public List<TreinamentoDepartamento> TreinamentoDepartamentos { get; set; }
}
    
public class TreinamentoDepartamento
{
    public int TreinamentoId { get; set; }
    public Treinamento Treinamento { get; set; }
    public int DepartamentoId { get; set; }
    public Departamento Departamento { get; set; }
}
    
public class TreinamentoDTO
{
    public int Id { get; set; }
    public string Titulo { get; set; }
    public string UrlVideo { get; set; }
    public string UrlArquivo { get; set; }
    public List<DepartamentoDTO> Departamentos { get; set; }
}
    
public class DepartamentoDTO
{
    public int DepartamentoId { get; set; }
    public string Nome { get; set; }
}

public class TreinamentoMapp : Profile
{
    public TreinamentoMapp()
    {
        CreateMap<Departamento, DepartamentoDTO>().ReverseMap();
        CreateMap<Treinamento, TreinamentoDTO>().ForMember(destinationMember => destinationMember.TreinamentoDepartamentos, map => map.MapFrom(prop => prop.Departamentos)).ReverseMap();
    }
}


Talvez dessa forma funcione o que está esperando, espero que sim.

Qualquer coisa chama no Skype, vai ser um prazer tentar te ajudar.

Abraço !

live:stellabertthiolly_1
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar