我正在使用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()
会干扰吗?可能是什么原因造成的?