У меня есть код первое, что использование ребенком родителя с таким же типомAutomapper карта ребенка одного типа
public class Comment
{
public int Id { get; set; }
public string Text { get; set; }
public int? ParentId { get; set; }
public virtual Comment Parent { get; set; }
public virtual IList<Comment> Child { get; set; }
}
Fluent API:
modelBuilder.Entity<Comment>().Property(c => c.ParentId).IsOptional();
modelBuilder.Entity<Comment>().HasMany(c => c.Child).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
Это нормально в рамках сущности. Но когда я пытаюсь использовать его на Automapper, я бросаю исключение StackOverflowException.
AutoMapperConfig:
cfg.CreateMap<Comment, CommentDTO>().ForMember(d => d.Child, opt => opt.UseDestinationValue());
CommentDTO:
public class CommentDTO
{
public int Id { get; set; }
public string Text { get; set; }
public int? ParentId { get; set; }
public virtual CommentDTO Parent { get; set; }
public virtual IList<CommentDTO> Child { get; set; }
}
Контроллер:
Context.Comments.GetAll().AsNoTracking().ProjectTo<CommentDTO>().AsQueryable();
Благодарим за помощь и за советы относительно соглашения об именах. К сожалению, также используя ReverseMap, я получаю ошибку StackOverflowException, когда я вызываю свою функцию Context.Comments.ProjectTo(); –
Sauron
Попробуйте использовать '.PreserveReferences()', как я отредактировал в своем ответе, пожалуйста. – CodingYoshi
Жаль, нечего делать. Я думаю, что StackOverflowException вызван списком дочернего типа того же типа. Аналогичный вопрос здесь http://stackoverflow.com/questions/37785124/automapper-map-child-list-with-from-same-type – Sauron