I am need help mapping my Domain Object to a ViewModel for use with my C#/MVC App
In the FormAnswer Class there can only be 1 Answer Type (AnswerCurrency, AnswerDateTime, AnswerBool,etc) this is enforced in the Database and Application Logic.
If a Answer exists it will needs to be to Mapped to the Answer Property in the FormAnswerModel if all values are null the Answer is a Empty String.
public class FormQuestion
{
public int Id {get; set;)
public string DataType {get; set;}
public string Question {get; set;}
}
public class FormAnswer
{
public int Id {get; set;)
public int QuestionId {get; set;)
public double? AnswerCurrency {get;set}
public dateTime? AnswerDataTime {get;set}
public bool? AnswerBool {get;set}
public string AnswerString{get;set}
public string AnswerText{get;set}
}
public class FormAnswerModel
{
public int Id {get; set;)
public int QuestionId {get; set;)
public string Answer{get;set}
}
You could use a custom mapping lambda method but it seems like you would need more logic here. A custom resolver seems to be a good option in this case.
See Automapper wiki
https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers
In the mapping options you can specify a
opt.ResolveUsing<TResolver>()
whereTResolver
inherits fromValueResolver<FormAnswer, string>
Also, if I need to know how to do something with Automapper I find that the unit tests provide very rich documentation.
Hope that helps.
ValueResolver
is a good suggestion, especially if you have this pattern elsewhere. If you're looking for a quick and dirty version (that is, if this is the only place you need to handle this sort of situation), try this: