2010-07-12 5 views
0

Est-il possible d'utiliser LINQ2SQL comme modèle MVC et de lier? - Depuis L2S "attachement" les problèmes sont vraiment showstopping.ASP.NET MVC LINQ-2-SQL comme modèle - comment mettre à jour?

[HttpPost] 
    public ActionResult Save(ItemCart edCart) 
    { 
    using (DataContext DB = new DataContext()) 
    { 
    DB.Carts.Attach(edCart); 
    DB.Carts.Context.Refresh(RefreshMode.KeepChanges, edCart); 
    DB.Carts.Context.SubmitChanges(); 
    DB.SubmitChanges(); 
    } 
    return RedirectToAction("Index"); 
    } 

Cela ne fonctionne pas. : S

+0

LINQ-to-SQL n'étant plus en cours de développement, envisagez Entity Framework. –

+0

La pratique reste la même, et un problème aussi. Il ne gagne plus de nouvelles fonctionnalités, mais c'est une technologie supportée, encore. – BuzzBubba

Répondre

0

À quoi ressemble votre vue Enregistrer?

Vous ne pouvez pas simplement attacher un nouvel élément à l'EntitySet comme ça. -> L'attachement nécessite beaucoup de contrôles et c'est une vraie peine à mettre en place. Je l'ai essayé moi-même et je n'ai pas aimé du tout.

Dans votre méthode [HttpPost] vous devez mettre à jour le modèle avant de pouvoir l'enregistrer:

[HttpPost] 
public ActionResult Save(int id, ItemCart edCart) { 
    DataContext DB = new DataContext(); // I'm doing this without a using keyword for cleanliness 
    var originalCart = DB.Carts.SingleOrDefault(c => c.ID == id); // First you need to get the old database entry 

     if (ModelState.IsValid & TryUpdateModel(edCart, "Cart")) { // This is where the magic happens. 
      // Save New Instance 
      DB.SubmitChanges. 

      return RedirectToAction("Details", new { id = originalCart.ID }); 
     } else { 
      // Invalid - redisplay with errors 
      return View(edCart); 
     } 
    } 

Il essaie de mettre à jour le modèle des contrôleurs valueprovider utilisant leur préfixe « panier ».

Questions connexes