Chcę wstawić nowy rekord do mojej tabeli SQL. Próbowałem:Wprowadź nowy obiekt do kontekstu z kluczem podstawowym tożsamości
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 * Jestem zaskoczony, aby zobaczyć intellisense mi powiedzieć: „Zauważ, że nowy podmiot nie jest dodawana lub dołączone do zestawu”
Błąd brzmi:
"Naruszenie ograniczenia klucza głównego" PK_TableName ".Nie można wstawić duplikatu klucza w obiekcie" dbo.TableName ".Kopiowana wartość klucza to (0). \ R \ nPozdrawienie zostało zakończone."
Problemem jest to, że ma swój questionComment
PK: questionComment.Id
domyślnie 0
. Musi to być następna dostępna Tożsamość lub w inny sposób nie wypełniona i "wstawić" normalną wstawkę.
W jaki sposób struktura encji oczekuje ode mnie obsłużenia tego scenerio?
zgodnie z żądaniem:
//------------------------------------------------------------------------------
// <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; }
}
}
Po wywołaniu 'SaveChanges()', 'newCommentObject. questionId' będzie zawierał nowo wygenerowany klucz przez bazę danych. – haim770
@ haim770 - Zaktualizowałem pytanie z dokładnym błędem, który otrzymuję i lokalizacją błędu. Jeśli istnieje jakiś mechanizm lub zamówienie, które może rozwiązać ten problem, proszę zamieścić odpowiedź. –
Zwykle robię coś takiego: moja "IDENTYFIKACJA" w bazie danych zaczyna się od 1 na górę; moje nowe jednostki w C# uzyskują "fałszywe" wartości PK od -1 w dół - te będą następnie zastępowane, gdy faktycznie wstawi się do tabeli (ale posiadające oddzielne, różne "fałszywe" wartości PK, upewnij się, że możesz pracować z jednostkami po prostu dobrze , a nawet odwoływać się do nich z innych obiektów!) –