2016-06-20 9 views
-1

Ich habe ein Problem mit dem Hinzufügen von Daten zu meiner Datenbank. Ich habe Tisch für Buch, Benutzer und Anleihen. Wenn der Benutzer also in der Anwendung angemeldet ist und Buch einliest, möchte ich neue Daten in die Leihtabelle einfügen. Ich dachte, es so etwas wie dies sein sollte (ich diese Methode aufrufen, wo auf ausgewählte Buch klicken):asp.net mvc Hinzufügen von Daten zur Datenbank programmgesteuert

public ActionResult AddIt([Bind(Include = "BorrowId,BorrowDate,GiveBackDate,BookId,UserId")] Borrows br)) 
{ 
    br.BorrowDate = DateTime.Now; 
    br.BookId = int.Parse(Session["BookId"].ToString()); 
    br.UserId = int.Parse(Session["UserId"].ToString()); 
    if (ModelState.IsValid) 
    { 
     db.borrows.Add(br); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return RedirectToAction("Index"); 
} 

Erste Benutzer-ID und BookID funktioniert, aber es ist etwas falsch, während diese Methode aufrufen. Ich habe den Fehler "Kann nicht gefunden" gefunden. Also, wie sollte diese Methode aussehen? GiveBackDate ist Nullable und ich möchte, dass es beim Erstellen des Datensatzes null ist.

EDIT: Ich rebuilt Projekt und dieser Fehler verschwand .. Aber Code funktioniert immer noch nicht richtig. Scheint so, als hätte BorrowIds nicht gezählt. Wenn die Datenbank leer ist, kann ich einen Datensatz speichern. Aber wenn ein Datensatz gespeichert wird, geht der nächste mit der ID 0 und erzeugt einen Fehler:

Verletzung der PRIMARY KEY-Einschränkung 'PK_BORROWS'. Kann doppelten Schlüssel in Objekt "Dbo.Borrows" nicht einfügen. Der doppelte Schlüsselwert ist (0). Die Anweisung wurde beendet.

Fehler bei 84 Reihe:

84: {

85: db.Borrows.Add (br);

86: db.SaveChanges();

87: zurück RedirectToAction ("Index"); 88:}

ich AddIt hier nennen, in BookController:

public ActionResult borrow(int id) 
{ 
    return RedirectToAction("AddIt", "Borrows"); 
} 
+0

Sie müssen den Fehler zu Ihrer Frage hinzufügen. Rufen Sie ToString für die Ausnahme auf und fügen Sie sie in ein [Bearbeiten] ein. – Will

+0

Welche Zeile verursacht tatsächlich die Ausnahme und was sind die vollständigen Ausnahmedetails? – pay

+0

Ein HTTP 404 bedeutet normalerweise, dass ein Routing-Problem vorliegt. Ein HTTP 500 ist der Standard, wenn der Code ausgeführt wird, aber irgendwann ein Fehler ausgelöst wird. – nurdyguy

Antwort

0

Ich fand einen Grund der Verletzung Primärschlüsselfehler. Als ich eine Datenbank erstellt habe, habe ich keine IDENTITY-Eigenschaft zu meiner BorrowID-Spalte für den Primärschlüssel hinzugefügt. ID sollte so aussehen:

CREATE TABLE [dbo].[Borrows] (
    [BorrowId] INT IDENTITY (1, 1) NOT NULL, 
0
  1. Sicherstellen, dass die URL korrekt ist. Controller, Aktion und Routing-weise
  2. Stellen Sie sicher, dass Sie tatsächlich einen HTTP-Post erstellen, da die Aktion nur einem Post-Verb zugeordnet ist.
Verwandte Themen