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