Итак, я понимаю, что Automapper не был разработан для такой работы. Он выравнивает объекты, как вы делаете, чтобы получить модель представления, но на самом деле ничего не делает иначе. Я полагаю, что это сделано специально, потому что Джимми и Крю используют больше шаблонов команд для обмена сообщениями, чтобы сохранить вещи обратно в базу данных.
Однако я знаю, что это не решит твою проблему. Итак, вот несколько вещей.
С Linq2Sql Вам нужно вытащить объект, затем обновить его и сохранить. Это
потому что linq2sql отслеживает изменения объекта. Однако между запросами у вас больше нет объекта linq2sql.
public void SaveCustomer(CustomerEditVM customer)
{
//Get the customer from repo
var domainCustomer = _repository.GetCustomerById(customer.Id);
Mapper.CreateMap<CustomerEditVM, Customer>();
Customer newCust = Mapper.Map<CustomerEditVM, Customer>(domainCustomer);
_repository.Update(newCust);
}
Однако, скорее всего, это не сработает из-за того, как работают linq2sql и automapper. Даже если отображение работает, linq2sql может не показать, что в объект были внесены изменения. Вам будет лучше составить карту вручную.
Кроме того, в Linq2Sql нет такой вещи, как Update.
public void Update(Customer customer)
{
_dataContext.Customers.Attach(customer);
_dataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, customer);
_dataContext.SubmitChanges();
}
Все, что вам нужно сделать, это получить объект из linq2sql, обновить его и вызвать SubmitChanges (); на _dataContext. Это позаботится об этом для вас. Я видел, что некоторые интерфейсы репозитория включают метод Update, но он ничего не делает в реализации Linq2Sql. Кроме того, вероятно, не самая лучшая идея вызывать SubmitChanges в методе обновления, так как вы можете захотеть обновить элементы, а затем отправить все изменения сразу, что является своего рода целью submitchanges (то есть единицы работы)