У меня есть base
класс, как следует
[DataContract]
public class BaseTable
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime? Created { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime? Updated { get; set; }
}
Вот мой parent
класс
[DataContract]
public class Parent:BaseTable
{
[Required]
[DataMember(Name = "key")]
[Key]
public Guid Key { get; set; }
[Required]
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "Child")]
public virtual ICollection<Child> Children{ get; set; }
}
Вот Child
класс
[DataContract]
public class Child:BaseTable
{
[Required]
[DataMember(Name = "key")]
[Key]
public Guid Key { get; set; }
[ForeignKey("ParentKey")]
[IgnoreDataMember]
public virtual Parent Parent{ get; set; }
public Guid GrandChildKey { get; set; }
[ForeignKey("GrandChildKey")]
public virtual GrandChild GrandChild { get; set; }
}
Вот GrandChild
Класс
[DataContract]
public class GrandChild:BaseTable
{
[Required]
[DataMember(Name = "key")]
[Key]
public Guid Key { get; set; }
[Required]
[DataMember(Name = "name")]
public string Name { get; set; }
}
Вот мой метод API контроллера
[HttpGet]
[Route("parentgroups")]
[Produces("application/json")]
[SwaggerOperation("GetSupportedParentGroups")]
[SwaggerResponse(400, "Bad input parameter")]
[SwaggerResponse(404, "Not found")]
[SwaggerResponse(500, "Internal server error")]
[ProducesResponseType(200, Type = typeof(Parent))]
public async Task<IActionResult> GetParentGroups()
{
var result = await _context.Parents
.Include(b => b.Children)
.ThenInclude(children=> children.GrandChild)
.ToListAsync();
return Ok(result);
}
Я вижу все правильные значения внутри result
во время отладки.
Но возвращенный JSON имеет null
значения для дочерних объектов. !!
Что-то, чего мне не хватает?
Как я могу сопоставить эти несколько объектов одному DTO?
Я создал отображение, как это
CreateMap<ParentDto, Parent>()
.ForMember(d => d.Key, opt => opt.MapFrom(s => s.Key))
.ForMember(d => d.Name, opt => opt.MapFrom(s => s.Name))
.ForMember(d => d.Children, opt => opt.MapFrom(s => Mapper.Map<ParentDto, Child>(s)))
Все еще не работает