У меня есть следующие модели:При отображении (automapper) необходимо преобразовать тип перечисления в BOOL
public class Foo
{
[Key]
public int FooID { get; set; }
public string Description { get; set; }
public bool IsValid{ get; set; }
}
У меня есть следующий вид модели:
public class FooViewModel
{
public int FooId { get; set; }
public string Description { get; set; }
public YesNoEnumViewModel IsValid{ get; set; }
}
Для тип YesNoEnumViewModel Я использовал следующее перечисление:
public enum YesNoEnumViewModel
{
[Display(Name = "Yes", ResourceType = typeof(UserResource))]
Yes = 1,
[Display(Name = "No", ResourceType = typeof(UserResource))]
No = 2
}
В моем коде мне нужно сопоставить свой viewModel с моей моделью. Поэтому я пробую:
[HttpPost]
public ActionResult AddedNew(FooViewModel viewModel)
{
if (!ModelState.IsValid)
return PartialView("AddedNew", viewModel);
var foo = Mapper.Map<FooViewModel, FooModel>(viewModel);
...
}
И у меня возникла ошибка при попытке сопоставить. Ошибка заключается в преобразовании из перечисления типа YesNoEnumViewModel в bool (свойство в моей модели имеет тип bool).
Вот мой CreateMap:
Mapper.CreateMap<FooViewModel, Foo>();
Может быть, мне нужно указать в CreateMap, что для члена IsValid моего FooViewModel что-то особенное должно быть сделано, чтобы преобразовать его в булево моей модели?
Благодарим за помощь.
Спасибо! Но что, если у меня есть свойство IsValid1 и IsValid2? Как использовать резольвер в этом сценарии, потому что в EnumResolver у нас есть только один возврат (определенный здесь для IsValid)? – Bronzato
Просто создайте больше сопоставлений в CreateMap: ForMember (dest => dest.IsValid1, opt => opt.ResolveUsing()). ForMember (dest => dest.IsValid2, opt => opt.ResolveUsing ()); –
Проблема - это возвращаемое значение в ResolveCore, которое всегда возвращается для того же свойства (здесь IsValid), но для сценария, где мы имеем IsValid1 и IsValid2: что вернуть? – Bronzato