У меня есть сценарий, в котором несколько вызовов API запускаются от разных клиентов через некоторый API (иногда через WebJob), в результате чего код API запускается одновременно. Этот код API вставляет записи в SQL через Entity Framework. Из-за одновременных вызовов таблица позволяет вставлять повторяющиеся записи, даже если есть условие для проверки существующей записи. Это происходит, когда разница между двумя вызовами составляет всего доли секунды.
Я хотел бы обработать это на уровне таблицы базы данных, установив составной ключ [ни один столбец не может быть установлен как уникальный] на комбинацию трех столбцов, чтобы SQL никогда не допускал дублирования записей на основе этих трех столбцов.
Однако один из столбцов для составного ключа должен допускать несколько неактивных записей, но не должен допускать двух записей с активными записями.
В приведенном ниже примере будет рассмотрена проблема:
Записи в красной рамке не должны быть разрешены, если CategoryId и CategoryTypeid одинаковы и оба активны.
Записи в зеленой рамке должны быть разрешены. Поэтому, если есть несколько записей с одинаковыми CategoryId и CategoryTypeId, только одна из них должна быть активной.
Пожалуйста, помогите в какой-то идее, как разработать решение, чтобы исправить это в конце БД.