У меня есть класс самоссылки
public class Project {
public Guid Id { get; set; }
public string Name { get; set; }
public Guid? ParentId { get; set; }
}
Я настроил базу данных psotgres с ядром ef и automapper, все работает.
Мой Dto выглядит следующим образом:
public class ProjectDto {
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<ProjectPathEntry> Path { get; set; } = new HashSet<ProjectPathEntry>();
}
с помощником-dto
public class ProjectPathEntry {
public Guid Id { get; set; }
public string Name { get; set; }
}
Теперь проблема возникает с конфигурацией автосопоставления :) Идентификатор и имя автоматически сопоставляются по соглашению, но путь, очевидно, не может сопоставляться напрямую.
Я могу заполнить Путь отдельным запросом:
var projectPath = await dbContext.Projects.FromSqlInterpolated(
$@"WITH recursive project(search_id, id, name) AS (
SELECT p.""Id"", p.""Id"", p.""Name""
FROM public.""Projects"" p
UNION ALL
SELECT p.""Id"", p2.id, p2.name
FROM public.""Projects"" p, project p2
WHERE p.""ParentProjectId"" = p2.search_id
)
SELECT proj.*
FROM project
JOIN public.""Projects"" proj on proj.""Id"" = project.id
WHERE search_id = {project.Id}
AND id != {project.Id}"
).ProjectTo<ProjectPathEntry>(mapper.ConfigurationProvider)
.ToListAsync(cancellationToken);
projectPath.Reverse();
project.Path = projectPath;
могу ли я как-то встроить этот запрос в мою конфигурацию автомаппера? Или есть возможность добавить SQL-представление в мою базу данных pg и сопоставить его с помощью конфигурации сущности ef?