Many-to-Many com EF COre e AutoMapper
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:
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.
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
Curtidas 0
Respostas
Stella Oliveira
09/04/2020
Seu mapper está tendo um looping, é só isso, eu faria dessa forma:
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
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
GOSTEI 0