Создать случайную строку и проверить ее уникальность в БД - PullRequest
0 голосов
/ 20 сентября 2018

Проверьте код ниже, RandomMan.MyRandomString(64) генерирует случайную строку из 64 символов.

Теперь я хочу проверить, является ли эта случайная строка уникальной в базе данных, используя запрос entityframework, как показано ниже.И если эта строка не уникальна в базе данных, она будет продолжать цикл do, пока не найдет уникальную случайную строку.Теперь мой вопрос: правильно ли я делаю?Или есть способ получше?

string randstr;
do {
    randstr = RandomMan.MyRandomString(64);
} while (DataCtx.StorageFiles.Any(x => x.AwsUniqueFileName == randstr));

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Стандартный подход для этого состоит в том, чтобы просто сгенерировать GUID :

Console.WriteLine(Guid.NewGuid());

Он разработан так, чтобы быть уникальным и крайне маловероятно, чтобы генерировать два идентичных идентификатора GUID даже на многих экземплярах одновременно, поэтомувам не нужно сильно беспокоиться об атомарности этой операции.

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

0 голосов
/ 20 сентября 2018

Я не могу сказать, правильно ли вы делаете это, но если у вас уже есть строка в БД, я мог бы предложить объединить (добавить) ваше поле идентификатора id в созданную строку, чтобы убедиться, что результатуникальный в БД, учитывая, что ваш MyRandomString производит только символы (или без цифр в конце)

Допустим, ваша сгенерированная строка abc и id строки, которую вы обновляете, 53 тогда ваша последняя уникальная строка будет abc53

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...