Ich arbeite in einem kleinen Projekt mit Web-API und Entity Framework. Und ich habe ein Problem mit der Veröffentlichung meiner Entität.Entity Framework in getrennten Szenario löst das Speichern oder Akzeptieren von Änderungen fehlgeschlagen, weil mehr als eine Entität vom Typ
Meine Entitäten wie folgt aussehen:
public class DayExercises
{
public DayExercises()
{
Exercises = new List<Exercise>();
}
[Key]
public int Id { get; set; }
public string Day { get; set; }
public virtual ICollection<Exercise> Exercises { get; set; }
}
und meine Exercise
Einheit wie folgt aussehen.
public class Exercise
{
public Exercise()
{
DayExercises = new List<DayExercises>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual List<DayExercises> DayExercises { get; set; }
}
und meine Web-API-Methode für die dayExercises
aussehen wie diese
[ResponseType(typeof(WorkoutTemplate))]
public IHttpActionResult PostWorkoutTemplate(DayExercises dayExercises)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
foreach (var dayExercise in dayExercises)
{
fitnessDbContext.Entry(dayExercise).State = EntityState.Added;
foreach (var exercise in dayExercise.Exercises.ToList())
{
fitnessDbContext.Entry(exercise).State = EntityState.Unchanged;
}
}
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = dayExercises.Id }, dayExercises);
}
Die Beziehung ist Many-to-Many-Posting.
Problem: Ich bin ein dayExercise
mit bestehenden Exercise
Senden (bereits in der Datenbank vorhanden) zu meiner Methode. aber wenn ich dayExercise
mit SAME zwei Übungen poste. Diese Ausnahme wird ausgelöst:
Weitere Informationen: Das Speichern oder Akzeptieren von Änderungen ist fehlgeschlagen, weil mehr als eine Entität vom Typ 'FitnessFirst.WebApi.Exercise' denselben Primärschlüsselwert hat. Stellen Sie sicher, dass explizit festgelegte Primärschlüsselwerte eindeutig sind. Stellen Sie sicher, dass datenbankgenerierte Primärschlüssel in der Datenbank und im Entity Framework-Modell korrekt konfiguriert sind. Verwenden Sie den Entity Designer für die erste Konfiguration von Database/Model First. Verwenden Sie die ‚HasDatabaseGeneratedOption“ fließend API oder ‚DatabaseGeneratedAttribute‘ Code Erste Konfiguration.
Ich habe auch versucht Deattach
, um die Einheiten und erhalten Sie die Übung aus der Datenbank mit ihren ID
und Attach
sie wieder und fügen Sie es dem dayExercise
aber es speichern zu Datenbank nicht
HINWEIS:.. wenn ich zwei verschiedene Übungen hinzufügen, ist es nicht, dass die Exception wirft
ich lese auch folgende Antworten, aber es ist es nicht lösen: Ensure that explicitly set primary key values are unique
Irgendwelche Vorschläge oder Erklärungen.
HAHA, ya das ist ein sehr alter Beitrag, ich habe diese Lösung vor 1 Jahr erreicht. +1, weil du Recht hast. –