使用automapper更新具有关系的实体

时间:2016-12-13 14:35:11

标签: c# asp.net-core automapper entity-framework-core

我使用EF Core和Automapper来更新我的实体。我有一个名为" Aluno"的实体,它与" Endereco"有关系。这是代码:

data.frame(ID = unlist(l_stacked))
#            ID
#1       bbb-5p
#2 bbb-5p-mi-98
#3  bbb-5p-6134
#4       abb-4p
#5       bbb-5p
#6 bbb-5p-mi-98

自动播放器配置:

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

AlunosController:

config.CreateMap<Aluno, AlunoViewModel>().ReverseMap();
config.CreateMap<Endereco, EnderecoViewModel>().ReverseMap();

当我尝试更新&#34; Aluno&#34;实体,我在context.SaveChanges():

上得到一个例外
  

无法为表格中的标识列插入显式值&#39; Enderecos&#39;   当IDENTITY_INSERT设置为OFF时。

但我并没有尝试插入新的&#34; Endereco&#34;,只是更新实体&#34; Aluno&#34;,并且可能更新&#34; Endereco&#34;,在var aluno中正确加载。

我做错了吗?

1 个答案:

答案 0 :(得分:2)

请尝试以下语法:

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