检查下面的代码,RandomMan.MyRandomString(64)
正在生成64个字符的随机字符串。
现在,我想使用下面的实体框架查询来检查此随机字符串在数据库中是否唯一。而且,如果该字符串在数据库中不是唯一的,则它将继续do
循环,直到找到唯一的随机字符串为止。现在我的问题是我做对了吗?还是有什么比这更好的方法了?
string randstr;
do {
randstr = RandomMan.MyRandomString(64);
} while (DataCtx.StorageFiles.Any(x => x.AwsUniqueFileName == randstr));
答案 0 :(得分:3)
我无法确定您是否正确执行了操作,但是如果您已经在数据库中拥有该行,我建议您将身份字段id
连接(添加)到生成的字符串中,以便确保假设您的MyRandomString
仅产生字符(或末尾没有数字),结果在数据库中是唯一的
假设您生成的字符串是abc
,而您要更新的行的id
是53
,那么您的最终唯一字符串将是abc53
答案 1 :(得分:3)
为此的标准方法是仅生成GUID:
Console.WriteLine(Guid.NewGuid());
它的设计独特,即使在多个实例上同时生成两个相同的GUID,也不太可能,因此您不必担心此操作的原子性。
发生冲突的可能性非常低,您根本可以跳过处理它,但是只是要确保可以在此列上设置唯一键并将其视为异常,所以肯定不需要循环。