2012-01-13 8 views
9

İşte benim denetleyici kodum,% 100 çalışıyor. Ancak, POST yöntemi AutoMapper kullanmıyor ve bu tamam değil. AutoMapper'ı bu eylem yönteminde nasıl kullanabilirim?Bir MVC3 uygulamasında Edit eylem yönteminde AutoMapper'ı kullanma

Veriye erişmek için Varlık Şablonu 4 ile Entity Framework 4 kullanıyorum.

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); 
} 

AutoMapper kullanırsam, varlık çerçeve başvurusu kaybolur ve veriler veritabanında kalmaz.

[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); 
} 

Bu yepyeni Ürün nesnesi dönen Mapper.Map işlevini neden olur ve bu nedenle, varlık çerçevesi grafiğe hiçbir referanslar tutuluyor tahmin ediyorum. Hangi alternatifleri öneriyorsunuz?

+0

yapmak düşünüyorum yaşadığınız problemin ne olduğu açık. POST yönteminizin Automapper kullanmıyor olduğunu söylüyorsunuz, ancak '[HttpPost]' yönteminizde herhangi bir Automapper kodu göremiyorum. –

+0

muhtemelen doğru şeyi geri göndermiyorsun? –

+0

O, automapper Robert anlamına geldiğinden emin değil, "modelbinder" anlamına geldiğini düşünüyorum ama% 100 emin değilim –

cevap

13

Ben O değil sadece

ayrıca ilk olmayan boş ürüne sahip ve aynı zamanda o kullanıcının bu ürünü değiştirmek için izin verildiğini kontrol etmek isteyebilirsiniz
Product product = _productRepository.FindProduct(model.ProductId); 
Mapper.Map(model, product); 
_productRepository.SaveChanges(); 

....

+0

Dang, slick! Bu bir çekicilik gibi çalışır. Teşekkür ederim! –

+0

Doğru, Aslında Get ve Post Yöntemi için Edit Map oluşturmak için **, Onun için Domain Modeli: ViewModel Mappings için Domain Modeli ve Post için: ViewModel Domain Model Mappings, [this] kontrol edin (http://stackoverflow.com/a/26908339/2218697), umarım birisine yardım eder. – stom