Сопоставление динамического объекта с помощью ValueInjecter

#mapping #valueinjecter

#сопоставление #valueinjecter

Вопрос:

Я извлекаю данные с помощью Simple.Данные — сопоставление таблицы базы данных с динамическим объектом. Я хочу сопоставить динамический объект с простым типом. Я пробовал это:

 var dbObject = Database.Default.LocationStatus.FindByLocationStatusId(locationStatusId);
ILocationStatus domainObject = new LocationStatus();
domainObject.InjectFrom((object)dbObject);
  

Но никакие свойства в DomainObject не заданы.
Сопоставление должно быть простым, поскольку имена свойств совпадают, например: DBObject .Имя и domainObject.Name

Где я ошибаюсь? Примечание: на самом деле я могу волшебным образом использовать (утиный ввод?) (LocationStatus)DBObject но я хотел бы знать, как сопоставить с помощью ValueInjecter. Спасибо.

Комментарии:

1. это должно работать, если свойства имеют одинаковое имя и тип, посмотрите здесь: valueinjecter.codeplex.com/discussions/240346

2. Да, вот откуда я получил исходный код. Должно быть, я что-то упускаю. Спасибо за вашу помощь, Чак.

Ответ №1:

Как ни странно, я столкнулся с этой же проблемой несколько дней назад, и решение было простым.

Вам также необходимо привести выходные данные вашей динамики к типу, который вы пытаетесь сопоставить.

В моем случае:

 WeatherData myData = new WeatherData().InjectFrom((object)weatherData);
  

как показано в сообщении, на которое ссылается в комментариях выше, не сработало (я подозреваю, что с той же проблемой, что и исходный плакат), но при приведении с использованием as …

 WeatherData myData = new WeatherData().InjectFrom((object)weatherData) as WeatherData;
  

Все работает нормально.

Таким образом, кажется, что даже с более новыми версиями, спустя более 3 лет это все еще может быть проблемой, и приведение типа вывода является исправлением.