Иностранный ключ не применяется

Почему следующее ограничение внешнего ключа (хотя выполняется отлично), не выполняемое SQLite? Как я могу обеспечить соблюдение отношений?

CREATE TABLE User (
    UserID TEXT Unique NOT NULL PRIMARY KEY,
    FirstName TEXT NOT NULL,
    LastName TEXT NOT NULL,
    Username TEXT NOT NULL,
    Password TEXT NOT NULL,
    Email TEXT NOT NULL,
    SignupDate TEXT NOT NULL
)

CREATE TABLE Category (
    CategoryID TEXT Unique NOT NULL PRIMARY KEY,
    UserID TEXT,
    FOREIGN KEY(UserID) REFERENCES User(UserID)
)

Ответ 1

Как соответствующие документы говорят (в разделе 2. Включение поддержки внешних ключей):

Предполагая, что библиотека скомпилирована ограничения внешних ключей, это по-прежнему должны приложения во время выполнения, используя Команда PRAGMA foreign_keys. Для Пример:

sqlite> PRAGMA foreign_keys = ON;

Ограничения внешнего ключа отключены по умолчанию (для назад совместимость), поэтому необходимо включить отдельно для каждой базы данных соединение отдельно.

Вы использовали это PRAGMA в соответствующем соединении? (Предполагая, как говорят документы, что sqlite скомпилирован соответствующим образом, а также версия с достаточно недавним выпуском, чтобы, конечно, обеспечить принудительное ограничение внешних ключей).

Ответ 2

Вы также можете включить поддержку внешнего ключа через встраивание в строку соединения:

foreign keys=True

Пример:

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture"