我的应用程序中的每个约会项目都需要一个用户友好的 UniqueId。此 UniqueId 是附加到项目的 BLOB 的“文件夹”名称。所以指南并不好。
我想出的一个解决方案是将项目主题合并在一起,其中保留所有字母数字,附加一个 -,然后插入记录,获取记录 ID,并使用 ID 更新记录。因此,主题为“生日派对”的项目变为“BirthdayParty-23”。但这是对数据库的 2 次写入。
一个半限制是,如果我在数据库中创建记录之前知道 UniqueId 值,那么我的保存代码会更快。 (通过这种方式,我调用异步方法来创建 BLOB,然后调用 SaveChangesAsync(),然后等待所有这些任务完成。)使用 Item.Id PK 意味着写入变为同步。 (仍然是异步调用,但必须先完成第一个 SaveChangesAsync(),然后才能进行 BLOB 异步调用。)
那么...如果我最终得到“BirthdayParty-{num}”,其中 num 是 1 ... 999,999 之间的随机数怎么办?这给了我一个干净的用户友好的 UniqueId。只需向数据库写入 1 次即可。
缺点是名称冲突的可能性不为零。可能性足够小吗?
或者有更好的方法吗?
我知道我已经评论过询问您的要求的“原因”,但如果我处于您的立场,这就是我会做的(并且过去已经做过)。
忘记将用户友好的唯一 ID 的数字部分链接到记录的标识列值。你试图让他们保持一致是没有任何意义的。相反,请使用单独的序列(假设您的数据库供应商有这样的东西),以便您可以在写入数据库之前声明下一个数字。这让您只需向数据库写入一次。
您仍然需要访问数据库才能获取该序列值,但这是一个非常便宜的操作。以下是这种方法的一些优点和缺点......
优点:
缺点: