Automapper: сопоставить дочерний объект (список объектов), получая данные из БД - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть эти классы:

public class Tournament
{
  public int Id { get; set; }
  public List<Prize> Prizes { get; set; }
  ...
}

public class Prize
{
    public int Id { get; set; }
    public int RankPosition { get; set; }
    public Stuff PrizeStuff { get; set; }
}

public class Stuff
{
    public int Id { get; set; }
    public string Description{ get; set; }
    public string StuffImagine { get; set; }    
}

У турнирного класса может быть несколько призов в виде списка;один приз связан с Турниром, а RankPosition является победителем (установлено в 1), второй и третий.STUFF - это таблица сервера sql, в которой регистрируются все элементы, которые "RankedPosition" выигрывает в турнире.

Моя задача - заполнить объект STUFF, предоставив только идентификатор клиента.

json из клиента выглядит следующим образом:

{
  "Name":"Test",
  "Rule": "this is a rule",
      "OtherProperty": "Just another property",
  "PrizePool":
  [
    {
        "RankPosition": "0",
        "Prize": 
        {
            "ID": 1
        }
    },
        {
        "RankPosition": "1",
        "Prize": 
        {
            "ID": 2
        }
    },
        {
        "RankPosition": "2",
        "Prize": 
        {
            "ID": 3
        }
    }
  ]
}

В этом случае я хочу установить свои объекты класса STUFF, используя вышеуказанный клиентский JSON, и сохранить объекты STUFF в дБ.

Как я могу вызватьМетод CreateMap из класса SOURCETOURNAMENT в TORUNAMENT таким образом, что список PRIZES может отображать внутренний объект STUFF из db?

Исходный и целевой объект PRIZES идентичны.

ОБНОВЛЕНИЕ: Я пытался использовать Automapper.Коллекция как предложено, но я не могу понять, как это сделать.Это реальный код:

// SOURCE
public class TournamentParameters
{
    public string Name { get; set; }
    public List<PremioGiocatore> Montepremi { get; set; }
    ... Other props
}

// DESTINATION
public class DataTournamentParameters
{
    public string Name { get; set; }
    public List<PremioGiocatore> Montepremi { get; set; }
    ... Other props
}

// Prize for the first & second in the tournament
public class PremioGiocatore
{
    public int Id { get; set; }
    public PosizioneClassifica PosizioneClassifica { get; set; }
    public Premio Premio { get; set; }
}

// Registry of Prizes
public class Premio
{
    public int Id { get; set; }
    public string Descrizione { get; set; }
}

При запуске Api у меня есть конфигурация mapper:

Mapper.Initialize((cfg) =>
{
    cfg.AddCollectionMappers();
    cfg.SetGeneratePropertyMaps<GenerateEntityFrameworkPrimaryKeyPropertyMaps<Contesto>>();
}); 

Я пытаюсь сопоставить исходный объект с целевым:

public int Create(TournamentParameters info)
{
    DataTournamentParameters dataInfo = _mapper.Map<TournamentParameters, DataTournamentParameters>(info);
    ...
}   

Так как этот Источник и Место назначения в основном равны, я не знаю, как создать карту, чтобы позволить заполнить мой Список назначения, начиная с источника, который имеет только идентификатор, как объяснено выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...