雪花 id

使用开源项目 RobThree/IdGen

# 添加包引用
dotnet add package IdGen
// 简单使用
using IdGen;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var generator = new IdGenerator(0);
        var id = generator.CreateId();
        // Example id: 862817670527975424
    }
}
// 结合 ef 使用
public abstract class DbContextBase : DbContext {
    
    public override int SaveChanges()
    {
        AddEntityId();
        return base.SaveChanges();
    }

    private void AddEntityId()
    {
        foreach (var entry in ChangeTracker.Entries<EntityBase>())
        {
            if (entry.State == EntityState.Added)
            {
                entry.Entity.Id = entry.Entity.Id > 0
                                    ? entry.Entity.Id
                                    : new IdGenerator(0).CreateId();
            }
        }
    }
}