我正在为一个包含以下类型的唯一约束的表的DataTable加载 FbDataReader (全表DDL)

CREATE TABLE MY_TABLE (
    PK_ID INTEGER NOT NULL,
    STRING_KEY CHAR(50) NOT NULL COLLATE NONE,
    INT_KEY INTEGER,
    CONSTRAINT PK_MY_TABLE PRIMARY KEY (PK_ID));  

ALTER TABLE MY_TABLE ADD CONSTRAINT FK_MY_TABLE_INT_KEY FOREIGN KEY (INT_KEY) REFERENCES MY_OTHER_TABLE (INT_KEY) 
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE MY_TABLE ADD CONSTRAINT U_MY_TABLE UNIQUE (STRING_KEY, INT_KEY);

我想要的是能够为同一个 STRING_KEY 提供多个条目,前提是它们有不同的 INT_KEY . 请注意,我可以将 INT_KEY 作为 NULL 记录,但如果是这样, (STRING_KEY, NULL) 记录也应该是唯一的 .

而且,我在 INT_KEY 上有一个外键 .

现在,当我加载 FbDataReader 时如下:

FbDataReader reader = command.ExecuteReader();
DataTable dataTable = new DataTable();
dataTable.Load(reader);

我收到一个错误:

无法启用约束 . 一行或多行包含违反非null,唯一或外键约束的值 .

所以我在这里进行测试:1 . 删除上面的唯一约束,然后加载工作2.使用只有 STRING_KEY 工作的唯一约束,即我绝对没有违反记录:单个键是唯一的,组合键也必须是唯一的 - 或者我误解了唯一约束的含义 . 3.设置 INT_KEY 中的所有 NULL 值不会更改任何内容 - 加载数据表时会发生相同的错误 .

当然,我可以将数据加载到 DataSource 并将 EnforceConstraints 设置为false,这有效 . 但是我感到不舒服,因为我发现了一个我不理解的错误并且忽略它而修复它...