【问题标题】:DBMetal (SQLite): "Sequence contains more than one element" with multiple foreign keysDBMetal(SQLite):具有多个外键的“序列包含多个元素”
【发布时间】:2010-07-15 21:52:50
【问题描述】:

尝试使用 DbMetal(作为 DbLinq 的一部分)创建 C# 文件时,出现以下错误:

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。我设置了一个表约束来设置外键。

如果我单独(每个项目)设置外键而不是作为表约束,生成的类对 Question 表有多个引用,在尝试插入表时会导致多个引用和错误。

【问题讨论】:

  • 嗨,这个问题可能会有所帮助:stackoverflow.com/questions/2761701/…
  • @andyp:这是我在谷歌搜索时不断提出的问题,但是我这里没有重复的外键。我什至用提供的补丁重新编译 DbMetal,但没有运气。
  • 除了单列“INTEGER PRIMARY KEY NOT NULL”之外,为什么要在 SQLite 中使用任何主键?无论如何,除此之外的任何其他选择都不是该数据库的 real 主键。请参阅SQLite docs 了解更多信息。
  • 我尝试将 QuestionChoice 表更改为只有一个 INTEGER PRIMARY KEY,但 DbMetal 仍在抱怨。这不是问题,是存在 2 个外键将其扔掉。

标签: c# linq sqlite dbmetal


【解决方案1】:

为了解决这个问题,我在 cmets 中采纳了 Stephen Cleary 的建议,并为所有表格使用了一个 INTEGER PRIMARY KEY。看起来虽然 SQLite 可能支持多个外键,但 DBMetal 对此想法感到窒息。

因此,另一个表的外键会产生一个引用,DBMetal 会适当地处理所有事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 2014-03-09
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多