Sto usando EF Core e Automapper per aggiornare le mie entità. Ho un'entità chiamata "Aluno", che ha una relazione con "Endereco". Ecco il codice:
public class Aluno : ApplicationUser{
...
public Endereco Endereco { get; set; }
...
}
public class AlunoViewModel : UserViewModel
{
public int Id { get; set; }
public EnderecoViewModel Endereco { get; set; }
}
public class Endereco{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get;set; }
...
}
public class EnderecoViewModel {
public int Id { get;set; }
...
}
La configurazione di automapper:
config.CreateMap<Aluno, AlunoViewModel>().ReverseMap();
config.CreateMap<Endereco, EnderecoViewModel>().ReverseMap();
AlunosController:
[HttpPut]
public JsonResult Put([FromBody]AlunoViewModel vm)
{
if (ModelState.IsValid)
{
var aluno = _context.Alunos
.Single(o => o.Id == vm.Id);
Mapper.Map(vm, aluno);
_context.SaveChanges();
Response.StatusCode = (int)System.Net.HttpStatusCode.OK;
return Json(true);
}
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
return Json(false);
}
Quando provo ad aggiornare un'entità "Aluno", ricevo un'eccezione su context.SaveChanges ():
Impossibile inserire il valore esplicito per la colonna Identity nella tabella 'Enderecos' quando IDENTITY_INSERT è impostato su OFF.
Ma non sto cercando di inserire un nuovo "Endereco", basta aggiornare l'entità "Aluno", e magari aggiornare "Endereco", che viene caricato correttamente all'interno della var aluno.
Sto facendo qualcosa di sbagliato?
Prova la seguente sintassi:
Mapper
.CreateMap<Aluno, AlunoViewModel>()
.ForMember(
dest => dest.Endereco,
opt => opt.MapFrom(src => src.EnderecoViewModel)
);