2012-05-15 2 views
0

J'apprends MVC2 et j'essaie de créer un système de gestion des demandes de données. Un peu comme un système de billetterie. Une petite question, dans ma classe de contrôleur mvc J'ai un post-créerLinq to SQL insert - ID n'incrémentant pas

[HttpPost] 
    public ActionResult Create(Request request) 
    { 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       // TODO: Add insert logic here 
       var db = new DB(); 
       db.Requests.InsertOnSubmit(request); 

       db.SubmitChanges(); 
       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(request); 
      } 

     } 
     else 
     { 
      return View(request); 
     } 

    } 

Ok, ce qui est extrêmement assez simple, bien ajouter mon point de vue et une fois que je crée une ligne que je reçois le 0 premier dans ma clé primaire rangée. Ensuite, il ne s'incrémentera plus, je vais ajouter une autre ligne et la capture me ramène à la même vue que je suis. Il semble que la clé primaire int n'incrémente pas.

Comment incrémenter automatiquement l'ID (type int) ici? Je suis un peu confus pourquoi MVC ne gère pas cela car c'est le type de clé primaire int. Il ne fera que la première ligne avec l'id = 0 et c'est tout.

+0

Cela ne me semble pas un problème de MVC - quelle technologie de base de données utilisez-vous? –

+0

@central - J'ai édité les balises sur votre question d'asp.net-mvc à linq-to-sql parce que votre question et sa cause est au niveau de la base de données. Btw - vous devez marquer la colonne ID dans votre tableau en tant qu'IDENTITY (1,1) - ou ouvrir SSMS et définir le drapeau Identity. –

+0

Actuellement à développer, j'utilise SQL Express avec seulement l'Explorateur de Serveur dans VS2010 à gérer. Et merci Andras Zoltan qui est un tag linq to sql. Fait du sens à propos de l'étiquette d'identité, va le comprendre dès maintenant dans VS. -edit. Assez facile sous les propriétés de la colonne dans 2k10 VisualStudio, «Identity Specification» - (est l'identité) est changé en «Oui» – central

Répondre

1

Votre colonne ID doit être définie en tant que colonne Identity dans la table du serveur SQL.

Aussi, vous devez créer votre contexte de données DB dans un using:

using(var db = new DB()) 
{ 
    db.Requests.InsertOnSubmit(request); 

    db.SubmitChanges(); 
    return RedirectToAction("Index"); 
} 

Sinon, vous connexions déversant dans tous les sens; et créer plus de fuites de mémoire qu'une première génération de fenêtres (bien, en fonction de votre trafic;))

+0

Merci pour l'aide, «en utilisant» est crucial alors. Mais je me suis adapté à une colonne d'identité et actuellement, je suis toujours en train de frapper la même chose create-View. Continuera à essayer de faire fonctionner les choses et de les poster. – central

+0

Donc ce que j'ai fait était supprimer le .dbml de mon modèle qui se connectait à la base de données. Apporter des modifications à l'identité et recréer la classe Linq to Sql et cela fonctionne bien maintenant. – central

+0

Ah oui, c'était la propriété de valeur auto-générée sur cette colonne dans le dbml: fait relire la valeur après insertion –