Я использую Automapper в своем проекте MVC / EF Code First. При отображении ViewModel в View я использую класс конвертера клиента, унаследованный от TypeConverter. Я настраиваю отображение, используя следующий код:
Mapper.CreateMap<CustomerViewModel, Customer>().ConvertUsing<CustomerConverter>();
где CustomerConverter - это мой класс TypeConverter.
Это прекрасно работает при создании нового объекта Customer и сохранении в db
Customer customer = Mapper.Map<CustomerViewModel, Customer>(viewModel);
dbEntities.Customer.Add(customer);
dbEntities.SaveChanges();
Но при редактировании существующего клиента я обнаружил, что изменения в объекте клиента не сохраняются.
Код, который я использую для обработки существующих обновлений клиентов, выглядит следующим образом
var customer = dbEntities.Customer.Single(a => a.CustomerId == viewModel.CustomerId.Value);
Mapper.CreateMap<ExistingCustomerViewModel, Customer>().ForMember(dest => dest.CustomerId, opt => opt.Ignore()).ConvertUsing<ExistingCustomerConverter>();
Mapper.Map<ExistingCustomerViewModel, Customer>(viewModel, customer);
dbEntities.Entry(customer).State = EntityState.Modified;
dbEntities.SaveChanges();
Я использую другую модель представления и конвертер клиентов для работы с существующим клиентом, поскольку я отображаю только ограниченные поля для обновления существующих клиентов.
Проблема в том, что при использовании вышеуказанного кода запись о клиенте не обновляется.
Я обнаружил, что если я удалю пользовательское преобразование, запись о клиенте будет обновлена.
т.е. 1018 *
Mapper.CreateMap<ExistingCustomerViewModel, Customer>().ForMember(dest => dest.CustomerId, opt => opt.Ignore());
работает правильно, но я теряю способность применять пользовательское сопоставление.
Я что-то упустил? Спасибо за помощь!
Спасибо! Bala