DBMetal (SQLite): «Последовательность содержит более одного элемента» с несколькими внешними ключами - PullRequest
0 голосов
/ 16 июля 2010

При попытке создать файл 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 Ответ

2 голосов
/ 19 сентября 2010

Чтобы решить эту проблему, я принял предложение Стивена Клири в комментариях и использовал один INTEGER PRIMARY KEY для всех таблиц.Похоже, что хотя SQLite может поддерживать несколько внешних ключей, DBMetal подавляет идею.

В результате внешний ключ к другой таблице приводит к единственной ссылке, а DBMetal обрабатывает все соответствующим образом.

...