2012-01-13 12 views
9

Oto mój kod kontrolera, który działa w 100% tak, jak tego potrzebuję. Jednak metoda POST nie używa AutoMappera, a to nie jest w porządku. Jak mogę użyć AutoMappera w tej metodzie akcji?Używanie AutoMapper w metodzie edycji akcji w aplikacji MVC3

Używam Entity Framework 4 ze Wzorcem repozytorium do dostępu do danych.

Jeśli korzystam z AutoMapper, odwołanie do struktury encji zostanie utracone, a dane nie będą przechowywane w bazie danych.

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

zgaduję jest to spowodowane funkcję Mapper.Map powrocie zupełnie nowy obiekt produktu i dlatego nie ma odniesienia do wykresu Entity Framework jest zachowany. Jakie alternatywy proponujesz?

+0

Nie wyjaśnij, na czym polega problem. Mówisz, że twoja metoda POST nie używa Automapper, ale nie widzę żadnego kodu Automapper w twojej metodzie '[HttpPost]'. –

+0

prawdopodobnie nie odsyłasz właściwej rzeczy? –

+0

Nie jestem pewien, czy on ma na myśli automapera Roberta, myślę, że ma na myśli "modelbinder", ale nie jestem w 100% pewny. –

Odpowiedz

13

myślę, że po prostu zrobić

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

możesz także sprawdzić, czy masz non produkt zerowej pierwszy, a także, że użytkownik może zmienić ten produkt ....

+0

Dang, slick! Działa to jak urok. Dziękuję Ci! –

+0

To prawda, właściwie musimy ** stworzyć Mapę dla Get and Post of Edit Method **, dla Get Its: Modelu domeny, aby zobaczyć mapowania ModelMode i dla Post: ViewModel do mapowania Modelu Domeny, sprawdź [to] (http://stackoverflow.com/a/26908339/2218697), nadzieja pomaga komuś. – stom

Powiązane problemy