Lets say I have an EF entity like this:
public class Person
{
public string Name { get; set; }
public string Psuedonym { get; set; }
public bool HasPsuedonym { get; set; }
}
From this entity I want to map to a viewmodel which looks like this:
public class PersonViewModel
{
public string Name { get; set; }
public PsuedonymViewModel { get; set; }
}
Which contains this other view model:
public class PsuedonymViewModel
{
public string Psuedonym { get; set; }
public bool HasPsuedonym { get; set; }
}
What mappings do I need to setup?
I have a generic mapping setup which creates the following mappings:
Person > PersonViewModel - memberlist.dest
PersonViewModel > Person - memberlist.source
PsuedonymViewModel > Person - memberlist.dest
Person > PsuedonymViewModel - memberlist.source
The generic mappings only map the properties which are present in the source or destination, depending on which way the mapping is so that I don't have to add a whole bunch of ignores in manually for properties which don't match.
When I have this setup, automapper says:
AutoMapper.AutoMapperConfigurationException: The following property on MyApplication.PsuedonymViewModel cannot be mapped:
Psuedonym
Add a custom mapping expression, ignore, add a custom resolver, or modify the destination type MyApplication.PsuedonymViewModel.
Context:
Mapping to property Psuedonym from System.String to MyApplication.PsuedonymViewModel
I understand this message as when trying to map to PsuedonymViewModel from the Person entity there is no mapping from string to Psuedonym. I can solve this with a manual mapping like this:
CreateMap<string, PsuedonymViewModel>()
.ForMember(x => x.HasPsuedonym, opt => opt.Ignore())
.ForMember(x => x.Psuedonym, opt => opt.MapFrom(y => y));
Whilst this maps the Psuedonym property I have to ignore the HasPsuedonym property which is not what I'm after, but because it's mapping from string there isn't anything else I can work with.
It feels like I've done something basic wrong here but I can't figure it out, any thoughts greatly appreciated.