DBMetal (SQLite): "Последовательность содержит более одного элемента" с несколькими внешними ключами
При попытке создать файл C# с помощью DbMetal (как часть DbLinq) я получаю следующую ошибку:
DbMetal: последовательность содержит более одного элемента
Он появляется только тогда, когда я ссылаюсь на несколько внешних ключей как часть моего первичного ключа. Ниже приведен DDL для моей таблицы, вызывающий проблемы:
CREATE TABLE [QuestionChoice]
(
[QuestionaireID] INTEGER NOT NULL,
[QuestionNumber] INTEGER NOT NULL,
[ChoiceNumber] INTEGER NOT NULL,
[Wording] VARCHAR
(
100
)
NOT NULL,
PRIMARY KEY
(
[ChoiceNumber],
[QuestionNumber],
[QuestionaireID]
),
FOREIGN KEY
(
[QuestionNumber],
[QuestionaireID]
)
REFERENCES [Question]
(
[QuestionNumber],
[QuestionaireID]
)
)
Инструмент, который я использую для настройки своей базы данных SQLite, - это SQLite Studio. Я установил ограничение таблицы для установки внешних ключей.
Если я устанавливаю внешние ключи отдельно (для каждого элемента), а не как ограничение таблицы, сгенерированные классы имеют несколько ссылок на таблицу Вопросов, что приводит к нескольким ссылкам и ошибкам при попытке вставить в таблицу.
1 ответ
Чтобы решить эту проблему, я принял предложение Стивена Клири в комментариях и использовал один INTEGER PRIMARY KEY
для всех таблиц. Похоже, что хотя SQLite может поддерживать несколько внешних ключей, DBMetal задыхается от этой идеи.
В результате внешний ключ к другой таблице приводит к единственной ссылке, и DBMetal обрабатывает все соответствующим образом.