111 messaggi dal 07 novembre 2007
Salve
sto facendo un'applicazione web e sto utilizzando SQLite, Nel DB risco ad inserire il vincolo di FK e l'EF6 me lo importa nel modello, però quando vado a provare a dare un valore sbagliato SQLite mi fa inserire il valore sbagliato. Ho provato ad attivare sul DB tra sue impostazioni il vincolo delle FK ma sembra ugualmente ignorarlo. Sapete darmi delucidazioni di merito.
Ciao e grazie
Mar
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
già, è vero, il motore di Sqlite non rispetta il vincolo per default e quindi ti consente di inserire valori che lo vìolano.
Dalla documentazione si legge:

2. Enabling Foreign Key Support
In order to use foreign key constraints in SQLite, the library must be compiled with neither SQLITE_OMIT_FOREIGN_KEY or SQLITE_OMIT_TRIGGER defined
[...]
Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA

foreign_keys command. For example:
sqlite> PRAGMA foreign_keys = ON;


In questa issue, si legge che il team di Entity Framework ha sistemato il problema per il provider Sqlite per EF7 (che però è ancora in beta).

Per il momento, dato che stai usando EF6 (suppongo) prova a dare tu il comando PRAGMA subito dopo aver aperto la connessione al database (cioè: dopo aver istanziato il DbContext) e vedi se a quel punto vieni bloccato quando provi ad inserire dati non validi.
var context = new TuoDbContext();
context.Database.ExecuteSqlCommand("PRAGMA foreign_keys = ON;");

Se ti scoccia doverlo digitare ogni volta che crei l'istanza del DbContext, potresti

centralizzarlo da qualche parte, ad esempio in un override di SaveChanges: prima dai il comando PRAGMA e poi invochi il metodo SaveChanges ereditato.

Ovviamente metti l'override in un altro file di codice, altrimenti ti verrà sovrascritto quando il designer rigenera la classe del DbContext.
public override int SaveChanges()
{
    this.Database.ExecuteSqlCommand("PRAGMA foreign_keys = ON;")
    return base.SaveChanges();
}


Fammi sapere se una di questa soluzioni ha funzionato.

ciao,
Moreno.

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.