У меня есть viewmodel, который аналогичен модели домена (но включает в себя дополнительные свойства).Обновление существующей модели домена с использованием наборов AutoMapper NULL
public class ProductViewModel
{
public string Name { get; set; }
public string ShortDescription { get; set; }
public string FullDescription { get; set; }
public string AdminComment { get; set; }
}
Из вышеперечисленного, я использую только некоторые свойства на моей странице просмотра.
В то время как я использую Automapper сопоставить мою существующую модель, все мои ViewModel поля, чтобы получить карту с domainmodel полея.
Mapper.Map(productViewModel, product);
Благодаря вышеописанному отображению всего неиспользованное ViewModel поле (по умолчанию неиспользуемого полого ViewModel имеет значение NULL) отображается в модель предметной области. Он заменяет мои существующие данные базы данных значениями NULL.
Есть ли способ исключить значения NULL и значения свойств по умолчанию из сопоставления?
Примечания:
- я наткнулся Using Automapper to update an existing Entity POCO
- Если мы используем скрытые поля для исключенных свойств выше проблема будет решена, поскольку ViewModel будет нести данные, используя скрытые поля. Но я не предпочитаю этого!
Я попытался следующий код, который не работает:
Mapper.CreateMap<ProductViewModel, Product>() .ForAllMembers(opt => opt.Condition(srs => (!srs.IsSourceValueNull || IsDefaultValue(srs.SourceValue, srs.SourceType))));
Edit:
После того как я попробовал Automapper skip null values with custom resolver (Спасибо abatishchev). Я использовал Разрешитель, но получаю ошибку недостающее конфигурацию типа карты или неподдерживаемый отображение
Мой фрагмент кода:
...
public System.DateTime CreatedOnUtc { get; set; }
public System.DateTime UpdatedOnUtc { get; set; }
public virtual ICollection<BackInStockSubscription> BackInStockSubscriptions { get; set; }
public virtual ICollection<OrderItem> OrderItems { get; set; }
Хотя resolver доступ к BackInStockSubscriptions в приведенном выше коде, я получаю сообщение об ошибке ,
Любые подсказки?
Вы пробовали распознаватель от http://stackoverflow.com/questions/20021633/automapper-skip-null-values-with-custom-resolver? – abatishchev
Я пробовал, но получаю ошибку ** Отсутствует конфигурация карты типа или неподдерживаемое отображение. ** Резольвер закончил доступ ко всем свойствам модели домена и начал получать доступ к приведенным ниже виртуальным сопоставлениям. К моменту доступа к «BackInStockSubscriptions» вышеупомянутая проблема происходит. BackInStockSubscriptions {get; задавать; } public virtual ICollection OrderItems {get; задавать; } ' Нужно ли мне что-нибудь делать? –
'public System.DateTime CreatedOnUtc {get; задавать; } public System.DateTime ОбновленоOnUtc {get; задавать; } публичный виртуальный ICollection
Можете ли вы поместить это в свой вопрос? Трудно прочитать код из комментария. – abatishchev