У меня есть запрос linq, выполняющийся в веб-службе WCF, который ищет совпадение, и если он не найден, он создает его.
мой код выглядит как
//ReadCommitted transaction
using (var ts = CreateTransactionScope(TransactionScopeOption.RequiresNew))
{
Contract contract = db.Contracts.SingleOrDefault(x => x.txtBlah == str);
if (contract == null)
{
contract = new Contract();
contract.txtBlah = str;
db.Contracts.InsertOnSubmit(contract);
db.SubmitChanges();
}
...
db.SubmitChanges();
}
Проблема в том, что я получаю дубликаты. Я думал, что транзакция заблокировала бы базу данных, чтобы гарантировать, что дубликаты не будут найдены (и предоставили возможность отката). Как я могу убедиться в отсутствии дубликатов?