0

我使用命令生成器自动生成 SQL 语句和 DataAdapter 来填充 DataSet 通常效果很好,但现在我遇到了多列上的唯一约束问题

我在 DB (PostgreSQL) 中有这样的唯一索引

CREATE UNIQUE INDEX idx_uniq ON table_1 (id,currency_id); 

DataAdapter / CommandBuilder 错误地读取了这个并分别在每列上设置唯一标志(id 和 currency_id),而不是使用两者的组合作为唯一。

我现在对我的应用程序产生了巨大的影响——因为我什至无法填充数据集——因为它说约束被破坏了。有什么方法可以强制 DA 正确阅读或删除那些错误的约束?

我坚持了几个小时,因此任何帮助/提示将不胜感激......

4

1 回答 1

1

如果这是命令生成器中的一个缺陷,您最快的解决方案可能是删除现有约束并手动添加一个新约束:

UniqueConstraint unique = 
   new UniqueConstraint(new { table_1.Columns["id"], 
                              table_1.Columns["currency_id"] });

// remove all unique constraints except primary key
// use ToList so that we can remove the constraint within the loop
for(c in table_1.Constraints
                .OfType<UniqueConstraint>()
                .Where(uc => !uc.IsPrimaryKey)
                .ToList())
{
    table_1.Constraints.Remove(c);
}
table_1.Constraints.Add(unique );

或者完全关闭约束:

dataset.EnforceConstraints = false;

但这可能会禁用您真正想要的一些约束(如外键约束)。

于 2020-03-24T11:59:43.937 回答