Quando si sviluppano applicazioni utilizzando il database SQLite, Entity Framework Core e il linguaggio C#, durante l'inserimento dei dati può verificarsi un errore di questo tipo:
Error 19: 'UNIQUE constraint failed: NomeTabella.Campo'.
Questo errore indica che si sta tentando di inserire un valore già presente in una colonna sulla quale è stato definito un vincolo UNIQUE oppure che viene utilizzata come chiave primaria.
Nel caso in cui il campo sia una chiave primaria numerica che deve essere generata automaticamente da SQLite, è opportuno verificare innanzitutto che la relativa colonna sia stata definita correttamente, ad esempio:
NomeCampo INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
È inoltre importante verificare la configurazione del modello nel DbContext, all'interno del metodo OnModelCreating, affinché Entity Framework Core sappia che il valore della chiave viene generato al momento dell'inserimento.
Ad esempio:
C#
modelBuilder.Entity<NomeTabella>(entity => { entity.HasKey(e => e.IdCampoChiaveContatore); entity.Property(e => e.IdCampoChiaveContatore).ValueGeneratedOnAdd();
entity.Property(e => e.CampoDate).HasColumnType("DATETIME"); });
In questo modo, IdCampoChiaveContatore viene configurato come chiave il cui valore viene generato durante l'inserimento del record.
Se, nonostante questa configurazione, compare l'errore UNIQUE constraint failed, è opportuno verificare anche il valore che l'applicazione sta effettivamente tentando di inserire: se viene assegnato manualmente un valore già esistente alla chiave primaria, SQLite segnalerà comunque una violazione del vincolo UNIQUE.
Nessun commento:
Posta un commento