2009-05-01 12 views
0

Ich bin ziemlich neu im Entity Framework und bin gerade dabei, meine erste MVC-Anwendung zu erstellen. Ich implementiere eine Create View für eine einfache Entity, habe jedoch Probleme mit dem Primärschlüssel der Identity-Spalte (SQL Express 2005). Nach meinem Verständnis sollte das Framework die Identity-Spalte behandeln und die SQL-Datenbank den ID-Wert generieren lassen.Entity Framework Identitätsspalte funktioniert nicht

Wenn ich versuche, mit der Create View zu speichern, ohne den ID-Wert zu setzen, erhalte ich den Fehler "Value is Required". Wenn ich einen Wert für die ID festlege, wird dieser mit dem Identity-Wert aus der Datenbank in die Datenbank zurückgespeichert - d. Anstatt den Wert, den ich angegeben habe, wird das T-SQL offensichtlich korrekt generiert, sobald es soweit ist.

Die Eigenschaft Identität auf der ID-Spalte in der Datenbank festgelegt und die StoreGeneratedPattern im Modell „Identität“ eingestellt ist (siehe unten): -

Name = „ID“ Type = „int“ Nullable = "false" StoreGeneratedPattern = "Identität"

Fehle ich etwas? Wie kann ich dem Modell mitteilen, dass für diese Spalte kein Wert erforderlich ist?

Antwort

0

Sie sagen nicht, wo der Fehler "Wert ist erforderlich" herkommt. Integer-Werte in Ihrem Clientmodell werden standardmäßig auf Null gesetzt, sodass immer ein Wert vorhanden ist. Ohne einen Stapel zu sehen, ist meine wilde Vermutung, dass der Fehler von woanders kommt. Sehen Sie sich den Stack an, wenn Sie den Fehler sehen, und ermitteln Sie, welcher Teil Ihrer Anwendung ihn erhöht.

+1

Sie Leitregel sind richtig. Es hat nichts mit der Datenbank zu tun. UpdateModel (Entität) schlägt fehl, wenn es die FormCollection empfängt. Versuchen Sie es auf andere Weise ModelState.IsValid = false, wenn die Entität übergeben wurde. Die Validierung "Wert ist erforderlich" wird für das ID-Feld zurückgegeben. –

1

Rätsel gelöst. Es scheint, dass das Problem ein Ergebnis meiner Namenskonvention war, bei der immer "ID" als Spaltenname für eine ID-Spalte verwendet wurde.

Als ich anrief

http://.../Vacancy/Create

Das Routingmodul diese nimmt zu als

Action = erstellen; ID = ""

vom MapRoute "{Controller}/{Aktion}/{id} VacancyID" im Modell "

die Identität Spaltennamen geändert" und voila alles funktioniert, wie es sollte.

0

würde ich eine benutzerdefinierte Route erstellen, das ist, was sie sind für sowieso ...

0

Wenn Sie wollen nicht Ihr Datenbankschema ändern können Sie hinzufügen, ohne dass id-Parameter

routes.MapRoute(
    "Create", 
    "{controller}/Create", 
    new { action = "Create" } 
); 
Verwandte Themen