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.
Wo deklarieren Sie TrainingTarget? –
das war nur ein Copy & Paste-Fehler. Ich habe den Code bearbeitet. Sollte "projectClass" sein –