I'd like to check my understanding and usage of the AutoMapper in my ASP.Net MVC app.
I setup the maps in Application_Start:
Mapper.CreateMap<Customer, CustomerViewModel>(); Mapper.CreateMap<CustomerViewModel, Customer>(); Mapper.AssertConfigurationIsValid();
To return a list of users associated with the logged in user, in my Customer Controller I have:
// // GET: /Customer/ public ActionResult Index() { var customer = db.Customers.Where(x => x.UserName == User.Identity.Name).ToList(); IList<CustomerViewModel> customerVM = Mapper.Map<IList<Customer>, IList<CustomerViewModel>>(customer); return View(customerVM); }
To Edit a specific customers details I am using:
// // GET: /Customer/EditPartial public ActionResult EditPartial(int id) { var customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == id).FirstOrDefault(); CustomerViewModel customerVM = Mapper.Map<Customer, CustomerViewModel>(customer); return PartialView(customerVM); }
Where I Post back updates after making changes in the EditPartial view:
// // POST: /Customer/EditPartial [HttpPost] [ValidateAntiForgeryToken] public ActionResult EditPartial(CustomerViewModel customerVM) { if (ModelState.IsValid) { Customer customer = db.Customers.Where(x => x.UserName == User.Identity.Name && x.CustomerId == customerVM.CustomerId).FirstOrDefault(); if (customer == null) { return HttpNotFound(); } customer.CustomerName = customerVM.CustomerName; // How do I use AutoMapper here, instead of updating the domain model directly customer.Email = customerVM.Email; db.Entry(customer).State = EntityState.Modified; db.SaveChanges(); ///////////////// // Now I want to return a customer list again // Is this the best way to do it again var customer2 = db.Customers.Where(x => x.UserName == User.Identity.Name).ToList(); IList<CustomerViewModel> customerVM2 = Mapper.Map<IList<Customer>, IList<CustomerViewModel>>(customer2); return PartialView("CustomerListPartial", customerVM2); } this.Response.StatusCode = 400; return PartialView("EditPartial", customerVM); }
The code above works, I'm just not sure about using AutoMapper in the Post, and if my way of returning a partial list of customers is the best method.