AutoMapper: сопоставить DTO с дочерним объектом одной таблице - PullRequest
0 голосов
/ 28 октября 2019

РЕДАКТИРОВАТЬ: Я понял это:

CreateMap<MyParentDto, MyDomainObject>();
CreateMap<ChildObjectDto, MyDomainObject>()
    .ForMember(s => s.ChildText, opt => opt.MapFrom(a => a.ChildText))
    .ForMember(s => s.ChildNumber, opt => opt.MapFrom(a => a.ChildNumber));

CreateMap<MyDomainObject, ChildObjectDto>();
CreateMap<MyDomainObject, MyParentDto>()
    .ForMember(d => d.ChildObject, opt => opt.MapFrom(s => s));

Я пытаюсь сопоставить DTO с дочерним объектом для одного класса домена, но яне уверен, что это вообще можно сделать.

Я работаю с EF Core 2.0, Code First в .NET WepApi.

Допустим, у меня есть следующие классы:

// Domain objects
[Table("foo", Schema = "bar")]
public partial class MyDomainObject
{
    public string SomeText { get; set; }
    public int SomeNumber { get; set; }
    public string ChildText { get; set: }
    public int ChildNumber { get; set; }
}

// DTOs
public class MyParentDto
{
    public string SomeText{ get; set; }
    public int SomeNumber { get; set; }
    public ChildObjectDto ChildObject { get; set: }
}

public class ChildObjectDto
{
    public string ChildText { get; set: }
    public int ChildNumber { get; set; }
}

Можно ли использовать AutoMapper для сопоставления этого, чтобы я мог делать запросы с таким телом JSON, как это?

{
    "SomeText": "string",
    "SomeNumber": "int",
    "ChildObject": {
        "ChildText": "string",
        "ChildNumber": "int",
    }
}

Я, честно говоря, не уверен, если эточто-то, что можно сделать, но я должен был следовать этому подходу (DTO с дочерним объектом и одной таблицей). Какие у вас есть предложения? Большое спасибо!

1 Ответ

0 голосов
/ 28 октября 2019

Я понял это, отредактировал ОП с отображениями, которые я сейчас использую:

CreateMap<MyParentDto, MyDomainObject>();
CreateMap<ChildObjectDto, MyDomainObject>()
    .ForMember(s => s.ChildText, opt => opt.MapFrom(a => a.ChildText))
    .ForMember(s => s.ChildNumber, opt => opt.MapFrom(a => a.ChildNumber));

CreateMap<MyDomainObject, ChildObjectDto>();
CreateMap<MyDomainObject, MyParentDto>()
    .ForMember(d => d.ChildObject, opt => opt.MapFrom(s => s));
...