AutoMapper TS自动映射具有相同名称的属性

时间:2018-09-26 21:15:12

标签: node.js automapper

我正在使用automapper-ts(1.9.0)映射NodeJ后端中的DTO和实体。 我不明白为什么没有映射具有相同名称的属性。

例如。我将PostEntity定义如下:

@Entity('Posts')
export class PostEntity extends BaseEntity {

    @Column({ type: 'varchar' })
    Src: string;

    @Column({ type: 'varchar', length: 140, nullable: true })
    Caption?: string;

    @ManyToOne(type => UserEntity, user => user.Photos)
    @JoinColumn({ name: 'UserId' })
    User: UserEntity;
}

我将PostDto定义为:

export class CreatePostDto {
    @ApiModelProperty()
    Base64Source: string;

    @ApiModelProperty()
    UserId: number;

    @ApiModelProperty()
    Caption?: string;
}

我创建了以下地图,以将DTO转换为Entity

config
    .createMap(CreatePostDto.name, PostEntity.name)
    .forMember('User.Id', (opts: AutoMapperJs.IMemberConfigurationOptions) => opts.mapFrom('UserId'))
    .ignoreAllNonExisting();

我希望将DTO转换为实体

const postEntity: PostEntity = await this.map<PostEntity>(post, CreatePostDto.name, PostEntity.name);

将导致如下所示:

postEntity: {
    User : { id : DtoUserId },
    Caption: "DtoCaption"
}

尽管Caption属性(即使在Dto和Entity中具有完全相同的名称)也不会被复制。 IgnoreAllNonExisting()会干扰吗?可能是什么原因造成的?

0 个答案:

没有答案