调用ExecuteReturnSnowflakeId方法主键会自动赋值雪花ID
public class 实体 { [SugarColumn(IsPrimaryKey =true)]//long类型的主键会自动赋值 public long Id { get; set; } public string Name{get;set; } } long id= db.Insertable(实体).ExecuteReturnSnowflakeId();//单条插入返回雪花ID List<Long> ids=db.Insertable(List<实体>).ExecuteReturnSnowflakeIdList();//多条插入批量返回,比自增好用
在导航操作中如果主键是Long不赋值也会自动赋值雪花ID
var id=SnowFlakeSingle.Instance.NextId();//也可以在程序中直接获取ID
用雪花ID一定要设置WORKID , 只要静态变量SnowFlakeSingle不能共享的情况都要有独的WorkId
养成良好习惯服务器上的WorkId和本地不要一样,并且多服务器都要设置不一样的WorkId
//程序启时动执行一次就行 SnowFlakeSingle.WorkId= 唯一数字; //从配置文件读取一定要不一样 //服务器时间修改一定也要修改WorkId //参数说明: //workerId机器ID 2进制5位 32位减掉1位 31个 //datacenterId机房ID 2进制5位 32位减掉1位 31个
标注:SqlSugar自带雪花ID是成熟算法,正确配置WORKID无一例重复反馈,标题4也可以用自定义雪花算法
精度long没有19位长度,所以序列化雪花ID时要序列化成string
[Newtonsoft.Json.JsonConverter(typeof(ValueToStringConverter))] //JsonConverter的命名空间不要搞错了 [SugarColumn(IsPrimaryKey =true)] public long Id { get; set; } //配置API使用JSON.NET //Nuget安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson services.AddControllers().AddNewtonsoftJson(opt => { //忽略循环引用 opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //不改变字段大小 opt.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
使用短雪花ID,这个算法需要你自已提供,因为短雪花ID不成熟所以我不提供,如何将自定义算法
集成进SqlSugar看标题4
如果你有好用的雪花ID组件用习惯了也可以使用你自个的算法(用自已的算法WorkId等都需要你的算法自已支持)
//程序启动时执行一次就行 StaticConfig.CustomSnowFlakeFunc = () => { return 你的雪花ID方法(); };
系统因为临时故障引起的时间回退,一般就是几十毫秒,比如系统卡了等,可以用临时ID进行处理,不让程序报错,
默认是扔出错误
//程序启时动执行一次就行 var ran=new Random(); StaticConfig.CustomSnowFlakeTimeErrorFunc = () => { return ran.Next(16, 18);//出现时间回退使用临时算法插入 };
如果是人为调整就需要重启服务,不能长时间用自定义ID,或者修改workId
2016 © donet5.comApache Licence 2.0