2016-05-14 10 views
0

Ive eine einfache databse von Tabellen mit ein paar bekamen Weicht mit Fremdschlüssel verknüpft. Jede Tabelle hat eine ID-Spalte mit Identity-Eigenschaft und Autoinkrement aktiviert. Aus dieser Datenbank habe ich ein Model in VS2015 generiert. Wenn ich jetzt versuche, neue Daten in eine MVC 5-Webanwendung einzufügen, erhalte ich einen Fehler, der besagt, dass NULL-Werte nicht in die "id" -Spalte eingefügt werden können. Ich frage mich, warum es das überhaupt versucht. Es sollte automatisch von der Datenbank inkrementiert werden. Im Mapping sind die Paramater:Wie Entity Framework verwendet mit Datenbank zuerst und Identitätsspalten

Entity Key = true 
Nullable = False (it´s integer, so it can´t be Nullable) 
StoreGeneratedPattern = Identity 
Type = Int32 

Das Modell selbst ist nur die automatische generierte Klasse:

namespace project.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class projectClass 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public projectClass() 
     { 
      this.plan = new HashSet<plan>(); 
     } 

     public int id { get; set; } 
     public string targetName { get; set; } 
     public Nullable<System.DateTime> created { get; set; } 
     public Nullable<System.DateTime> updated { get; set; } 
     public int CategoryId { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<plan> plan { get; set; } 
     public virtual Category Category { get; set; } 
    } 
} 

und der Controller automatisch auch erzeugt:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create([Bind(Include = "id,targetName,created,updated,CategoryId")] projectClass projectClass) 
    { 
     if (ModelState.IsValid) 
     { 
      db.projectClass.Add(projectClass); 
      await db.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.trainingCategoryId = new SelectList(db.projectClass, "id", "shortDescription", projectClass.CategoryId); 
     return View(projectClass); 
    } 

Ich habe wirklich keine Idee, warum die ID-Spalte eingefügt wird und wo sie geändert werden soll.

+0

Wo deklarieren Sie TrainingTarget? –

+0

das war nur ein Copy & Paste-Fehler. Ich habe den Code bearbeitet. Sollte "projectClass" sein –

Antwort

0

Ok, bekam es. Es war ein Datenbankproblem. Ich habe versucht, eine Zeile manuell einzufügen, was auch fehlgeschlagen ist. So fand ich einen schlecht geschriebenen Auslöser auf dieser Tabelle, der die Ausnahme verursachte.

Verwandte Themen