Я использую 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 на свойствах навигации.Итак, мой вопрос: как заставить родителей и детей работать глубже, используя автопилот?