Ich möchte einen neuen Datensatz in meine SQL-Tabelle einfügen. Ich habe versucht:Neue Entität in Kontext mit Identitätsprimärschlüssel einfügen
public void CreateComment(int questionId, string comment)
{
QuestionComment questionComment = context.TableName.Create();//1*
questionComment.propertyThatIsNotAConstraint= questionId;
questionComment.body = comment;
context.QuestionComments.Add(questionComment);
context.SaveChanges();//ERROR...
}
1 * Ich bin überrascht, mich zu sehen intellisense sagen: „Beachten Sie, dass die neue Einheit wird auf die Menge nicht hinzugefügt oder befestigt“
Fehler Liest:
"Verletzung der PRIMARY KEY-Einschränkung 'PK_TableName'. Kann keinen doppelten Schlüssel im Objekt 'dbo.TableName' einfügen. Der doppelte Schlüsselwert ist (0). \ R \ nDie Anweisung wurde beendet."
Das Problem ist, dass questionComment
seine PK hat: questionComment.Id
-0
Verzug geraten. Es muss die nächste verfügbare Identität sein oder anderweitig nicht ausgefüllt sein und eine "normale" Identität einfügen.
Wie erwartet Entity Framework, dass ich mit diesem Szenario handle?
wie gewünscht:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Feedback.Models
{
using System;
using System.Collections.Generic;
public partial class QuestionComment
{
public int id { get; set; }
public int questionId { get; set; }
public string body { get; set; }
public int commentIndex { get; set; }
}
}
Nach dem Aufruf von 'Savechanges()', 'newCommentObject. questionId' wird den neu generierten Schlüssel von der Datenbank enthalten. – haim770
@ haim770 - Ich habe die Frage mit dem genauen Fehler, den ich erhalte, und dem Ort des Fehlers aktualisiert. Wenn es einen Mechanismus oder eine Reihenfolge gibt, die das beheben kann, posten Sie bitte eine Antwort. –
Normalerweise mache ich so etwas: Meine 'IDENTITY' in der Datenbank geht von 1 auf; Meine neuen Entitäten in C# erhalten "gefälschte" PK-Werte von -1 abwärts - diese werden dann ersetzt, wenn die tatsächliche Einfügung in die Tabelle erfolgt (aber getrennte, unterschiedliche "gefälschte" PK-Werte stellen sicher, dass Sie mit den Entitäten gut arbeiten können) und verweisen sie sogar von anderen Entitäten!) –