DataAdapter / CommandBuilder - уникальное ограничение на несколько столбцов - PullRequest
0 голосов
/ 24 марта 2020

Я использую компоновщик команд для автоматической генерации SQL операторов и DataAdapter для заполнения DataSet. Обычно работает хорошо, но теперь у меня есть проблема с уникальным ограничением на несколько столбцов

У меня в БД (PostgreSQL) такой уникальный index

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

DataAdapter / CommandBuilder прочитал это неправильно и установил уникальный флаг для каждого столбца в отдельности (id & currency_id), вместо этого используйте комбинацию обоих как уникальных.

Я имею огромное влияние на мой приложение сейчас - потому что я не могу даже заполнить набор данных - потому что оно говорит, что ограничения нарушены. Любой способ заставить DA прочитать это правильно или удалить те неправильные ограничения?

Я застрял с этим, так как несколько часов, поэтому любая помощь / советы будут высоко оценены ...

1 Ответ

1 голос
/ 24 марта 2020

Если это ошибка в компоновщике команд, ваше самое быстрое решение - удалить существующее ограничение и вручную добавить новое:

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;

но это может отключить некоторые ограничения, которые вы на самом деле хотите (например, ограничения внешнего ключа).

...