2012-01-13 8 views
9

Aquí está mi código de controlador, que funciona al 100% cuando lo necesito. Sin embargo, el método POST no usa AutoMapper y eso no está bien. ¿Cómo puedo usar AutoMapper en este método de acción?Uso de AutoMapper en el método de acción Editar en una aplicación MVC3

Estoy usando Entity Framework 4 con el patrón Repository para acceder a los datos.

public ActionResult Edit(int id) 
{ 
    Product product = _productRepository.FindProduct(id); 
    var model = Mapper.Map<Product, ProductModel>(product); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Edit(ProductModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     Product product = _productRepository.FindProduct(model.ProductId); 

     product.Name = model.Name; 
     product.Description = model.Description; 
     product.UnitPrice = model.UnitPrice; 

     _productRepository.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

    return View(model); 
} 

Si uso AutoMapper, la referencia de entidad de marco se pierde y los datos no se conservan en la base de datos.

[HttpPost] 
public ActionResult Edit(ProductModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     Product product = _productRepository.FindProduct(model.ProductId); 
     product = Mapper.Map<ProductModel, Product>(model); 

     _productRepository.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 

    return View(model); 
} 

Supongo que esto se debe a la función Mapper.Map devolver un nuevo objeto del producto y debido a eso, se mantiene ninguna referencia a la gráfica marco de la entidad. ¿Qué alternativas sugieres?

+0

No es aclare cuál es el problema que está experimentando. Usted dice que su método POST no usa Automapper, pero no veo ningún código Automapper en su método '[HttpPost]'. –

+0

¿no estás publicando lo correcto? –

+0

No estoy seguro de que se refiera a automapper Robert, piense que quiere decir "modelbinder" pero no estoy 100% seguro –

Respuesta

13

Creo que acaba de hacer

Product product = _productRepository.FindProduct(model.ProductId); 
Mapper.Map(model, product); 
_productRepository.SaveChanges(); 

es posible que también desee comprobar que usted tiene un producto no nula en primer lugar y también se permite que el usuario cambie ese producto ....

+0

Dang, slick! Esto funciona como un encanto. ¡Gracias! –

+0

Es correcto, en realidad tenemos que ** crear un mapa para obtener y publicar el método de edición **, para Get Its: Domain Model para ViewModel Mappings y para publicar su: ViewModel to Domain Model Mappings, verificar [this] (http://stackoverflow.com/a/26908339/2218697), la esperanza ayuda a alguien. – stom

Cuestiones relacionadas