TinyMapper отображает int в подкласс - PullRequest
0 голосов
/ 11 апреля 2019

Я использую TinyMapper для отображения из класса Log в LogViewModel.

public class Log
{
  //.... bunch of properties here 
  public int LevelId {get; set;}
}

public class LogViewModel
{
  //.... bunch of properties here 
  public LogLevelViewModel Level {get; set;}
}

public class LogLevelViewModel
{
  public int Id {get; set;}
  public string Name {get; set;}
}

Для Level есть перечисление, но мы используем модель представления LogLevelViewModel, чтобы содержать Id и Name, соответствующие значению и имени перечисления. В базе данных Log имеет поле LevelId, которое является значением перечисления.

Проблема в том, что я пытаюсь использовать TinyMapper для отображения с Log на LogViewModel. Если я использую привязку по умолчанию

TinyMapper.Bind<Log, LogViewModel>();

и в контроллере:

var data = TinyMapper.Map<List<LogViewModel>>(logs);

значения заполняются просто отлично, за исключением Level, оно равно нулю, хотя Log.LevelId нет. Когда я пытаюсь сопоставить LevelId с Level.Id, это также все равно просто дает ноль для Level.

TinyMapper.Bind<Log, LogViewModel>(config =>
{
  config.Bind(src => src.LevelId, dest => dest.Level.Id);
});

В идеале мне нужно связать с int LevelId и напрямую заполнить значения Level.Id и Level.Name, но если бы я мог хотя бы просто получить значение Level.Id, которое было бы адекватным. Кто-нибудь знает, как этого добиться?

Примечание: я попробовал несколько других вариантов привязок, но все, что я получил бы, это ошибка "System.ArgumentException: 'Expression is not a MemberExpression'".

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете написать пользовательское связующее: https://github.com/TinyMapper/TinyMapper/wiki/Custom-mapping. Хотя тогда вы как бы теряете очко в первую очередь ...

Я бы рассмотрел AutoMapper, который намного легче обрабатывает подобные вещи: https://automapper.org/

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