Вопрос

Я изменил System.Data.SQLite для использования последней версии SQLite это автоматически применяет внешние ключи без использования пользовательских триггеров.

Я также использую SubSonic 2.x, но это применимо для любых ORM платформ, использующих SQLite, которые «открываются поздно, закрываются рано».

Как бы вы обеспечили, чтобы оператор «PRAGMA foreign_keys = true» вызывался в каждом SQLiteConnection.Open ()? Он должен быть вызван или внешние ключи не работают.

Это было полезно?

Решение

Чтобы исправить это, я добавил свойство «Внешние ключи» в ConnectionString в классе SQLiteConnection.

Внешние ключи = ON Внешние ключи = OFF

Другие советы

Вам не нужно изменять System.Data.SQLite, если вы хотите использовать последнюю версию SQLite, просто используйте версию ManagedOnly System.Data.SQLite, а затем только замените sqlite3.dll последней версией. Для включения поддержки внешнего ключа я просто выполняю инструкцию sql, которая включает поддержку внешнего ключа. например.

        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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top