[Index(nameof(Time))]
[Table("DataEntries")]
public class DataEntry
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public DateTime Time { get; set; } = DateTime.Now;
public byte StatusCode { get; set; }
}
< /code>
Ich kann erfolgreich neue Einträge einfügen, aber das Aktualisieren oder Löschen eines Eintrags führt immer zu dem folgenden Fehler: < /p>
DBUpDateConcurrencyException beim Aufrufen von Savechangen (). /> < /blockquote>
Hier ist ein minimales Beispiel, das jedes Mal die Ausnahme erzeugt: < /p>
var result = ctx.DataEntries
.Where(t => t.Time >= start && t.Time t.Time).First();
result.StatusCode = 1;
ctx.SaveChanges();
< /code>
Bei weiterer Untersuchung vermute ich nachdrücklich, dass es damit zu tun hat, dass mein Entität einen manuellen Set -Schlüssel hat (und daher keine Identitätsspalte in der Datenbank). Wenn ja, wie? Das [url=viewtopic.php?t=20324]Problem[/url] hierfür ist, dass die Datenbank bereits viele tausend Zeilen enthält. Ich weiß daher nicht, ob eine einfache Datenbankmigration in diesem Fall funktioniert. var result = ctx.DataEntries.First();
result.StatusCode = 1;
ctx.SaveChanges();
edit2 : Ich habe auch versucht, eine separate "ID" -Spalte vom Typ int hinzuzufügen. Ich habe die Spalte mit zufälligen INTs (nur zum Testen) besiedelt. Ich habe dann in der Entitätsklasse eine [primaryKey] als "Zeit" und "ID" als Identitätsspalten deklariert. Funktionierte aber immer noch nicht.
In Entity Framework Core 7 habe ich die folgende Entität: < /p> [code] [Index(nameof(Time))] [Table("DataEntries")] public class DataEntry { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public DateTime Time { get; set; } = DateTime.Now;
public byte StatusCode { get; set; } } < /code> Ich kann erfolgreich neue Einträge einfügen, aber das Aktualisieren oder Löschen eines Eintrags führt immer zu dem folgenden Fehler: < /p>
DBUpDateConcurrencyException beim Aufrufen von Savechangen (). /> < /blockquote> Hier ist ein minimales Beispiel, das jedes Mal die Ausnahme erzeugt: < /p> var result = ctx.DataEntries .Where(t => t.Time >= start && t.Time t.Time).First(); result.StatusCode = 1;
ctx.SaveChanges(); < /code> Bei weiterer Untersuchung vermute ich nachdrücklich, dass es damit zu tun hat, dass mein Entität einen manuellen Set -Schlüssel hat (und daher keine Identitätsspalte in der Datenbank). Wenn ja, wie? Das [url=viewtopic.php?t=20324]Problem[/url] hierfür ist, dass die Datenbank bereits viele tausend Zeilen enthält. Ich weiß daher nicht, ob eine einfache Datenbankmigration in diesem Fall funktioniert. var result = ctx.DataEntries.First(); result.StatusCode = 1;
ctx.SaveChanges(); [/code] [b] edit2 [/b]: Ich habe auch versucht, eine separate "ID" -Spalte vom Typ int hinzuzufügen. Ich habe die Spalte mit zufälligen INTs (nur zum Testen) besiedelt. Ich habe dann in der Entitätsklasse eine [primaryKey] als "Zeit" und "ID" als Identitätsspalten deklariert. Funktionierte aber immer noch nicht.
Dies wurde zuvor gefragt, aber ich habe keine Antworten gefunden, die für meinen Anwendungsfall funktionieren.
Ich habe ein vereinfachtes Spielzeugbeispiel erstellt, um mein Problem zu erklären....
Ich versuche, zur Erstellungszeit eine Spezifikationsdatei für meine Controller mit OpenApi zu generieren.
Ich habe dies in die csproj-Datei eingefügt:
$(MSBuildProjectDirectory)/ApiSpecs
true