У меня есть эти объекты в моем приложении.
Category.ts
export class Category {
@PrimaryGeneratedColumn()
Id: number
@Column()
Name: string
@OneToMany(type => SubCategory, subcategoy => subcategoy.Category)
SubCategories: SubCategory[];
}
SubCategory.ts
export class SubCategory {
@PrimaryGeneratedColumn()
Id: number
@Column()
Name: string
@ManyToOne(type => Category, category => category.SubCategories)
@JoinColumn({name: "CategoryId"})
Category: Category;
}
Теперь, если я хочу добавить новую подкатегорию, каким должен быть мой формат DTO? Я попробовал следующее, но внешний ключ (CategoryId) был NULL.
SubCategoryDto.ts
export class SubCategoryDto {
Id: number;
Name: string;
CategoryId: number;
}
Я понимаю, почему значение столбца CategoryId было нулевым в базе данных, поскольку CategoryId пытались преобразовать в Category, и не удалось, поскольку оба они имеют другой тип. Я мог бы сделать следующее, но я чувствую, что это только увеличивает размер данных запроса (даже если они немного)
export class SubCategoryDto {
Id: number;
Name: string;
Category: CategoryDto; //has the properties of Id and Name
}
Так каким должен быть формат SubCategoryDto? Нужно ли преобразовывать DTO в класс Entity, сначала выбрав категорию из базы данных, а затем создав сущность SubCategory? Например:
//request data for new sub-category
{
Name: "Subcategory 1",
CategoryId: 1
}
А на стороне сервера
const newSubcategory = new SubCategory(); //entity class
newSubcategory.Name = subCategoryDto.Name;
newSubcategory.Category = await this.categoryService.findById(subCategoryDto.CategoryId)
await this.subCategoryService.create(newSubcategory);
Однако, если я сделаю это таким образом, не будет ли это дополнительным вызовом базы данных? Каков наилучший способ справиться с этой ситуацией? Я искал в интернете весь день и не мог найти что-то связанное с этим. Я думаю, что это настолько простая вещь, которую никто не должен был спрашивать, но, к сожалению, я не уверен, как это должно быть сделано Любая помощь будет оценена.