Как включить каскадное удаление внешнего ключа по умолчанию в SQLite?

SQLite v3.7.5

Есть ли способ включить внешние ключи SQLite с включенным по умолчанию каскадным удалением ? Рассмотрим следующий пример:

CREATE TABLE [Parent] (
[ParentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
[Name] VARCHAR(50)  UNIQUE NOT NULL
);

CREATE TABLE [Child] (
[ChildId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
[ParentId] INTEGER  NOT NULL,
[Name] VARCHAR(50)  NOT NULL,
FOREIGN KEY(ChildId) REFERENCES Child(ParentId) ON DELETE CASCADE
);

Единственный способ, которым я смог включить каскадное удаление, - это выполнить команду PRAGMA foreign_keys = true перед транзакцией:

using( var conn = new SQLiteConnection( _conn ) )
{
    conn.Open();
    var pragma = new SQLiteCommand( "PRAGMA foreign_keys = true;", conn );
    pragma.ExecuteNonQuery();

    var cmd = new SQLiteCommand( "Delete from Parent where ParentId = 1", conn );
    cmd.ExecuteNonQuery();
}

Есть ли параметр в базе данных уровень, который можно настроить вместо того, чтобы вызывать команду pragma перед каждой транзакцией?

Я видел триггеры для включения каскадного удаления, но ищу что-то, что просто включило бы PRAGMA foreign_keys = true на уровне базы данных.

7
задан Metro Smurf 12 February 2011 в 23:35
поделиться