Вы путаете безопасность потоков с параллелизмом базы данных. Служба PerCall не создает проблем с безопасностью потоков, если только вы не порождаете несколько потоков в своей служебной программе (чего следует избегать).
Ваш вопрос должен быть перефразирован: вы обеспокоены согласованностью базы данных и параллелизмом в таблице Customer во время вставки (например, не видите клиента, которого создал кто-то другой).
Существует очень стандартизированный способ в реляционной базе данных, который выполняет свойства ACID (атомарность, согласованность, изоляция, долговечность), чтобы справиться с этим: Обернуть чек / вставку в транзакции.
Для вас будет лучше написать хранимую процедуру (скажем, CreateCustomerIfNotExists
), в которой есть транзакция, которая проверяет, существует ли определенный идентификатор клиента, и вставит новую строку в таблицу, если она не существует.
Свойства ACID реляционной базы данных автоматически предотвращают то, чего вы боитесь.