Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf dieser Seite werden die Konfiguration und Muster der Wertgenerierung beschrieben, die für den SQLite-Anbieter spezifisch sind. Es wird empfohlen, zuerst die allgemeine Seite zur Wertgenerierung zu lesen.
AUTOINCREMENT-Spalten
Standardmäßig werden numerische Primärschlüsselspalten, die mit dem AUTOINCREMENT-Feature von SQLite eingerichtet sind, so konfiguriert, dass ihre Werte beim Hinzufügen generiert werden. Ab EF Core 10 kann SQLite AUTOINCREMENT auch über die Konfiguration aktiviert oder deaktiviert werden.
Konfigurieren von AUTOINCREMENT
Standardmäßig werden ganzzahlige Primärschlüssel automatisch mit AUTOINCREMENT konfiguriert, wenn sie nicht Teil eines zusammengesetzten Schlüssels sind und keinen Fremdschlüssel enthalten. Möglicherweise müssen Sie jedoch explizit eine Eigenschaft so konfigurieren, dass SQLite AUTOINCREMENT verwendet wird, wenn die Eigenschaft eine Wertkonvertierung aus einem nicht ganzzahligen Typ aufweist oder wenn Konventionen außer Kraft gesetzt werden:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.HasConversion<int>()
.UseAutoincrement();
}
Deaktivieren von AUTOINCREMENT für die standardmäßige SQLite-Wertgenerierung
AUTOINCREMENT verursacht zusätzlichen Overhead bei CPU, Arbeitsspeicher, Festplattenspeicher und Datenträger-E/A im Vergleich zum Standardalgorithmus der Schlüsselgenerierung in SQLite - ROWID. Der Nachteil von ROWID besteht darin, dass Werte aus gelöschten Zeilen wiederverwendet werden. Wenn Ihr Szenario davon nicht betroffen wäre, sollten Sie autoINCREMENT deaktivieren und stattdessen das Standardverhalten der Wertgenerierung von SQLite verwenden. Dazu können Sie die Metadaten-API verwenden:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.Metadata.SetValueGenerationStrategy(SqliteValueGenerationStrategy.None);
}
Alternativ können Sie EF so konfigurieren, dass die Eigenschaft nicht als wertgeneriert betrachtet wird.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.ValueGeneratedNever();
}
Dies bedeutet, dass die Anwendung vor dem Speichern in der Datenbank einen Wert für die Eigenschaft bereitstellt. Beachten Sie, dass dies weiterhin die serverseitige Standardwertgenerierung nicht deaktiviert, sodass Nicht-EF-Verwendungen weiterhin einen generierten Wert erhalten könnten. Um die Wertgenerierung vollständig zu deaktivieren, ändern Sie den Spaltentyp von INTEGER in INT.