EF, рекурсивный от ребенка к родительскому?

Ваш вопрос не очень ясен, но это должно достигнуть того, что вы пытаетесь сделать:

decimal numericValue = 3494309432324.00m;
string formatted = numericValue.ToString("#,##0.00");

Тогда formatted будет содержать: 3,494,309,432,324.00

0
задан Jez 13 July 2018 в 11:23
поделиться

1 ответ

Возможно, это немного «обманывает» ответ, но я действительно добился того, чего хотел с помощью awaome AutoMapper . Я думаю, что за кадром, это делает рекурсивную работу для меня. Мой объект EF имеет свойство навигации Parent, мой DTO для отображения выглядит примерно так:

public class CompanyInChainDTO
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public CompanyInChainDTO Parent { get; set; }
}

... и этот код заставляет AutoMapper создавать цепочку DTO от дочернего элемента с помощью заданный ID до корневого родителя (т. е. тот, у которого нет Parent):

Mapper.Initialize(conf =>
{
    conf.CreateMap<EF.Company, CompanyInChainDTO>().MaxDepth(100);
});

using (var context = new EfContext())
{
    var child = context.Companies.First(comp => comp.Id == [whatever]);

    CompanyInChainDTO childDto = Mapper.Map<CompanyInChainDTO>(child);

    return childDto;  // Returns the child DTO with full Child -> Parent chain!
}

Очень круто - я не знал, что AutoMapper по умолчанию сохраняет свойства навигации EF. Обратите внимание, как я также использую MaxDepth(100) для обеспечения безопасности, чтобы предотвратить бесконечную рекурсию на случай, если нет корневой материнской компании!

0
ответ дан Jez 17 August 2018 в 13:04
поделиться
  • 1
    Это, безусловно, упрощает код, но он скрывает тот факт, что еще n + 1 запросов уволены. – Gert Arnold 13 July 2018 в 12:53
  • 2
    Правда, но я не уверен, что есть более эффективный способ сделать это с EF. – Jez 13 July 2018 в 12:57
  • 3
    Нет, действительно, нет. Если вы хотите извлечь одну ветвь целой иерархии, вам нужны представления SQL на основе иерархических запросов с использованием CTE. – Gert Arnold 13 July 2018 в 13:04
Другие вопросы по тегам:

Похожие вопросы: