Automapper глубокое картирование - PullRequest
0 голосов
/ 20 февраля 2019

Я использую EFCore 2.2 и automapper 8.0.0.У меня есть таблица с именем папки, и у нее есть еще одна таблица с именем folderReferences, и код для таблицы папок:

public Guid Id { get; set; }

public virtual ICollection<FolderReference> Parents { get; set; }

public virtual ICollection<FolderReference> Children { get; set; }

А для FolderReference:

public Guid ParentId { get; set; }

public Guid ChildId { get; set; }

public bool IsDeleted { get; set; }

public virtual Folder Parent { get; set; }

public virtual Folder Child { get; set; }

И соединения в DatabaseContext:

builder
  .Entity<FolderReference>()
  .HasOne(a => a.Parent)
  .WithMany(a => a.Children)
  .HasForeignKey(a => a.ParentId)
  .OnDelete(DeleteBehavior.Restrict);

builder
  .Entity<FolderReference>()
  .HasOne(a => a.Child)
  .WithMany(a => a.Parents)
  .HasForeignKey(a => a.ChildId)
  .OnDelete(DeleteBehavior.Restrict);

С automapperConfig:

CreateMap<Folder, FolderModel>()
            .ForMember(a => a.ChildrenCount, a => a.MapFrom(b => b.Children.Count))
            .ForMember(a => a.ParentsCount, a => a.MapFrom(b => b.Parents.Count))
            .ForMember(a => a.Parents, a => a.MapFrom(b => b.Parents.Select(c => c.Parent)))
            .ForMember(a => a.Children, a => a.MapFrom(b => b.Children.Select(c => c.Child)));

И модель папки:

public class FolderModel
    {
        public Guid Id { get; set; }

        public IEnumerable<FolderModel> Parents { get; set; }

        public IEnumerable<FolderModel> Children { get; set; }

        public int ParentsCount { get; set; }

        public int ChildrenCount { get; set; }
    }

И вызов:

var folder = await _defaultContext.Folders
     .ProjectTo<FolderModel>(_mapper.ConfigurationProvider)
     .FirstAsync(a => a.Id == folderId, _cancellationToken);

return folder;

Проблема, когда явызовите папки из базы данных, используя ProjectTo, он показывает мне это:

{
  "id": "c6531829-555a-471e-aa86-09f21ceea720",
  "parents": [],
  "children": [
    {
      "id": "767742ca-6fb0-48f6-a377-f25ee9fbeefc",
      "parents": null,
      "children": null,
      "parentsCount": 2,
      "childrenCount": 0
    },
    {
      "id": "de6642a6-3a49-4cc8-a7d2-3afec075a4b2",
      "parents": null,
      "children": null,
      "parentsCount": 1,
      "childrenCount": 1
    }
  ],
  "parentsCount": 0,
  "childrenCount": 2
}

Родители и дети нулевые, и я не знаю, как заставить автопереработчик работать глубже.Я использую LazyLoading на свойствах навигации.Итак, мой вопрос: как заставить родителей и детей работать глубже, используя автопилот?

...