使用automapper更新具有關係的實體

asp.net-core automapper c# entity-framework-core

我正在使用EF Core和Automapper來更新我的實體。我有一個名為“Aluno”的實體,它與“Endereco”有關係。這是代碼:

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; }
    ...
}

自動配置:

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);
    }

當我嘗試更新“Aluno”實體時,我在context.SaveChanges()上遇到異常:

當IDENTITY_INSERT設置為OFF時,無法在表'Enderecos'中為identity列插入顯式值。

但我不是要插入一個新的“Endereco”,只是更新實體“Aluno”,並且可能更新“endereco”,它在var aluno中正確加載。

難道我做錯了什麼?

一般承認的答案

請嘗試以下語法:

Mapper
    .CreateMap<Aluno, AlunoViewModel>()
    .ForMember(
        dest => dest.Endereco,
        opt => opt.MapFrom(src => src.EnderecoViewModel)
    );


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因