Я думаю, вы поступаете неправильно.Вам следует создать экземпляр Customer
и затем сопоставить его свойства с помощью AutoMapper.
Таким образом, ваш код будет выглядеть так:
[HttpPost]
public ActionResult Create(CVM model)
{
Mapper.CreateMap<CVM, Customer>();
Customer customer = /* Construct or get a Customer instance, eg from DB. */
Mapper.Map<CVM, Customer>(model, customer);
return View();
}
Кстати, вы должны сделатьобязательно иметь директивы Mapper.CreateMap<CVM, Customer>()
только во время запуска приложения, в противном случае вы будете выполнять этот (возможно, дорогостоящий) шаг без необходимости при каждом запросе.
Редактировать
Кажется, я неправильно прочитал исходный вопрос.Если цель состоит в том, чтобы создать клиента со связанными объектами, тогда Automapper может помочь вам несколькими различными способами (я собираюсь продолжить с примером Person / PhoneNumber, который вы привели в комментариях).
Учитывая, что ваши сущностии View Models:
public Person {
public string Name { get; set; }
public string List<PhoneNumber> Numbers { get; set; }
}
public PersonVM {
public string Name { get; set; }
public string IList<PhoneNumberVM> Numbers { get; set; }
}
public PhoneNumber {
public int Type { get; set; }
public string Number { get; set; }
}
public PhoneNumberVM {
public int Type { get; set; }
public string Number { get; set; }
}
, тогда у вас есть несколько альтернатив:
- Вы можете попробовать написать пользовательское правило отображения так, чтобы каждый экземпляр
PhoneNumberVM
отображался наPhoneNumber
экземпляр или - Вы можете добавить
Mapper.CreateMap<PhoneNumberVM, PhoneNumber>()
и просто позвонить Mapper.Map<PersonVM, Person>(model)
, чтобы привязать вашу модель к вашей сущности.
Конечно, вам придетсяубедитесь, что ваша модель построена правильно, но это не так сложно, если вы используете ту же модель для создания HTML-формы.