Проверьте наличие дубликатов при сохранении - PullRequest
1 голос
/ 21 марта 2011

Как проверить наличие дубликатов при сохранении нового объекта?

Сценарий:

  • проверка на наличие дубликатов по какому-либо запросу -> если нет дубликатов, выполнить сохранение

Не хорошо, потому что между проверкой и сохранением достаточно времени, когда другой пользователь может вставить новый объект с тем же данные (высокая активность пользователей).

Стоит ли проверять исключение при сохранении или как?

1 Ответ

0 голосов
/ 21 марта 2011
using (var tx = session.BeginTransaction(IsolationLevel.Serializable))
{
    bool alreadyExists = session.Query<MyEntity>()
                                .Any(x => x.UniqueProp = newEntity.UniqueProp);
    if (!alreadyExists)
        session.Save(newEntity)
    tx.Commit();
}

Уровень изоляции Serializable гарантирует, что никто не сможет вставить соответствующую строку между запросом и вставкой. Конечно, недостатком является снижение параллелизма из-за блокировок диапазона.

Обработка исключения является альтернативой.

...