Как добавить дерево данных в БД используя EF Core
у меня еcть DTO
public record CategoryDto
{
public string Name { get; set; } = null!;
public string Url { get; set; } = null!;
public int Parent { get; set; }
public IReadOnlyList<CategoryDto> Childs { get; set; } = Array.Empty<CategoryDto>();
}
Есть сущность
[Table("t_category")]
public class Category : BaseEntity,
IHasUniqueName
{
[MaxLength(255)]
public string Name { get; set; } = null!;
[MaxLength(255)]
public string Url { get; set; } = null!;
public int? ParentId { get; set; }
public Category? Parent { get; set; }
public ICollection<Category> Children { get; set; } = Array.Empty<Category>();
}
DTO я получаю со стороннего сайта м не нужно эту DTO преобразовать в сущность и добавить в базу. Как это сделать? Как используя средства EF Core добавлять такие данные?
Сервис который я набросал, тут думаю сформировать сущность и вызвав метод Insert у репозитория просто добавть данные
public class CategoryService : ICategoryService
{
private readonly ICategoryRepository _categoryRepository;
private readonly ICategoryParser _categoryParser;
private readonly IMapper _mapper;
public CategoryService(ICategoryRepository categoryRepository,
ICategoryParser categoryParser,
IMapper mapper)
{
_categoryRepository = categoryRepository;
_categoryParser = categoryParser;
_mapper = mapper;
}
public async Task InitAsync(CancellationToken cancellationToken = default)
{
var dtos = await _categoryParser.GetAllAsync(cancellationToken);
foreach (var dto in dtos)
{
var category = _mapper.Map<Category>(dto);
await _categoryRepository.InsertAsync(category, cancellationToken);
if (dto.Childs.Any())
//await AddChildrenAsync(category.Id, dto.Childs);
}
}
}