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 обрабатывает все соответствующим образом.

Другие вопросы по тегам