Допустим, у меня есть таблица промо-кодов и таблица контактов. Каждый контакт может иметь 1 промо-код, и каждый промо-код может быть назначен только 1 контакту. Как бы я использовал программу назначения, которая выбрала бы промо-код из таблицы и присвоила бы его контакту без проблем с параллелизмом / коллизий.
Наихудший сценарий:
- Контакт А запрашивает код.
- Первый доступный промо-код найден и выбран в БД, промо-код A.
- Контакт Б запрашивает код. Первый доступный промо-код найден и выбран из БД, промо-код A.
- Изменение контакта A сохранено.
- Изменение контакта B сохранено.
Теперь, в зависимости от того, как сохраняется присвоение промокода, произойдет 1 из 2 вещей:
- 2 контактам будет присвоен одинаковый промо-код.
- Контакт B получит сообщение об ошибке, если возникнет исключение дублирующегося ключа.
К вашему сведению, я использую DataContext, который содержится в HTTPContext, чтобы он был доступен для каждого HTTP-запроса. Не уверен, что это имеет значение.
Итак, используя C # и Entity Framework, как я могу выполнить это назначение промо-кода, не сталкиваясь с этими типами коллизий? Заранее спасибо!