オートマトンを使って関係を持つエンティティを更新する

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

質問

私はエンティティを更新するためにEF CoreとAutomapperを使用しています。私は "アルノ"と呼ばれるエンティティを持っています。これは "エンデレコ"との関係を持っています。ここにコードです:

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'のID列に明示的な値を挿入できません。

しかし、私は新しい "Endereco"を挿入しようとしていません、ちょうど "Aluno"エンティティを更新して、おそらくvar aluno内に正しくロードされている "Endereco"を更新してください。

私は何か間違っているのですか?

受け入れられた回答

次の構文を試してください。

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は合法ですか? はい、理由を学ぶ