调用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