Создание записей следует простой процедуре: проверьте, нет ли аналогичной записи в БД, и, если нет, создайте запись.SeriesInstUid не является первичным ключом.Первичный ключ создается сервером SQL, так как для него настроено свойство идентификации на сервере.
Как показано ниже:
DataClassAsclepiusImagingDataContext db = new DataClassAsclepiusImagingDataContext();
var matchingSeries = from s in db.Series
where s.DDSeriesInstanceUID == dd.seriesInsUid
select s;
if ((matchingSeries == null) || (matchingSeries.Count() < 1))
{
Series ser = new Series();
db.GetTable<Series>().InsertOnSubmit(ser);
db.SubmitChanges();
}
Проблема возникает, когда несколько параллельных потоков пытаются выполнить одно и то жекод в быстрой последовательности, запись может быть создана другим абонентом между "если запись существует?"и "если не создать новую запись".В этом случае первый вызывающий пользователь создаст дубликат.
Каков хороший способ убедиться, что дубликаты не создаются в этом сценарии?