一般情况下,我们是使用自增长ID来做主键ID的。也有些哥们,是使用GUID来作为主键ID(本人并不建议采用GUID,主键一般是表的聚集索引,如果用了GUID做主键,每次insert会导致磁盘的移动,以及存储page的分裂,导致存储碎片)。
而用主键ID会导致“只有Insert完后,才能知道ID号”。
这里提供一种方案,就是 .NET版的snowflake,它会提供给你一个唯一的long型的整数,让你可以作为ID使用。
1.使用nuget引入dll:
2.编写一个获取ID的类:
/// <summary>
/// 获取long型的唯一ID
/// </summary>
public class IdUtils
{
// 这里必须单例,才能保证ID唯一
// 不同功能用不同的workerId,可以更能保证ID唯一
private static IdWorker worker = new IdWorker(1, 1);
public static long getId()
{
return worker.NextId();
}
}
后续所有程序,只有调用getId(),就能获取到一个唯一的ID,用于insert到数据库,这么看来,这还是很方便的。缺点是相比自增长ID,这ID还是很长的,稍微需要大一丢丢的存储空间。