Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette page détaille la configuration et les modèles de génération de valeur spécifiques au fournisseur SQLite. Il est recommandé de lire d’abord la page générale sur la génération de valeurs.
Colonnes « AUTOINCREMENT »
Par convention, les colonnes clés primaires numériques configurées pour que leurs valeurs soient générées lors de l’ajout sont configurées avec la fonctionnalité AUTOINCREMENT de SQLite. À compter d’EF Core 10, SQLite AUTOINCREMENT peut également être activé ou désactivé via la configuration.
Configuration d’AUTOINCREMENT
Par convention, les clés primaires entières sont automatiquement configurées avec AUTOINCREMENT lorsqu’elles ne font pas partie d’une clé composite et qu’elles n’ont pas de clé étrangère. Toutefois, vous devrez peut-être configurer explicitement une propriété pour utiliser SQLite AUTOINCREMENT lorsque la propriété a une conversion de valeur à partir d’un type non entier ou lors de la substitution de conventions :
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.HasConversion<int>()
.UseAutoincrement();
}
Désactivation d’AUTOINCREMENT pour la génération de valeurs SQLite par défaut
AUTOINCREMENT impose une surcharge supplémentaire d’UC, de mémoire, d’espace disque et d’E/S de disque par rapport à l’algorithme de génération de clés par défaut dans SQLite - ROWID.
ROWID L’inconvénient est qu’il réutilise les valeurs des lignes supprimées. Si votre scénario n’est pas affecté par cela, vous pouvez désactiver AUTOINCREMENT et utiliser le comportement de génération de valeurs par défaut de SQLite à la place. Pour ce faire, utilisez l’API de métadonnées :
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.Metadata.SetValueGenerationStrategy(SqliteValueGenerationStrategy.None);
}
Vous pouvez également configurer EF pour ne pas traiter la propriété comme générée par la valeur :
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Id)
.ValueGeneratedNever();
}
Cela signifie qu’il est à l’application de fournir une valeur pour la propriété avant d’enregistrer dans la base de données. Notez que cela ne désactive toujours pas le côté serveur de génération de valeurs par défaut, de sorte que les utilisations non EF peuvent toujours obtenir une valeur générée. Pour désactiver complètement la génération de valeurs, remplacez le type de colonne par INTEGERINT.