Domanda

Ho modificato System.Data.SQLite per utilizzare una versione recente del SQLite che impone automaticamente le chiavi esterne senza utilizzare trigger personalizzati.

Sto anche usando SubSonic 2.x ma questo si applica a tutti i ORM che utilizzano SQLite che sono "aperti fino a chiudere molto presto".

Come assicureresti che l'istruzione 'PRAGMA foreign_keys = true' sia chiamata su ogni SQLiteConnection.Open ()? Deve essere chiamato o le chiavi esterne non funzionano.

È stato utile?

Soluzione

Per risolvere questo problema, ho aggiunto una proprietà "Chiavi esterne" a ConnectionString nella classe SQLiteConnection.

Chiavi esterne = ON Chiavi esterne = OFF

Altri suggerimenti

Non è necessario modificare System.Data.SQLite se si desidera utilizzare l'ultima versione di SQLite, è sufficiente utilizzare la versione ManagedOnly di System.Data.SQLite e quindi sostituire solo sqlite3.dll con l'ultima versione. Per abilitare il supporto di chiave esterna eseguo semplicemente un'istruzione sql che abilita il supporto di chiave esterna. per es.

        string databasePath = "Your database path here";
        string connectionString = "Data Source=" + databasePath;
        connection = new SQLiteConnection(connectionString);
        connection.Open();

        const string sqlString = "PRAGMA foreign_keys = ON;";
        SQLiteCommand command = new SQLiteCommand(sqlString, connection);
        command.ExecuteNonQuery();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top