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