Aop给主键设定为顺序Guid 返回

SqlSugar 处理完成
13 119

Guid主键生成的是顺序Guid。目前Aop设置Id代码如下:

 db.Aop.DataExecuting = (oldValue, entityInfo) =>
 {
     if (entityInfo.EntityColumnInfo.IsPrimarykey)
     {
         if (entityInfo.OperationType is DataFilterType.InsertByObject)
         {
             if (entityInfo.EntityValue is Entity entity
                 && entity.Id == Guid.Empty)
             {
                 entity.Id = IDGen.NextID();
             }
         }
     }
 };

我既想Aop设置顺序GuidId,又想保留Insert前手动设置Id的可能。但是到Aop里面,Id已经被设置好了,只能删除

entity.Id == Guid.Empty

判断,强制覆盖Id。

有没有关闭自动生成Guid的设置?或者有aop比框架生成Guid更早设置Id。

热忱回答13

  • 现在这个代码的问题在哪儿,我看好像没有什么问题

    0 回复
  • 你代码好像写错了

    0 回复
  •              if (entityInfo.PropertyName == "Id"&&oldValue?.ToString()==Guid.Empty)
                 {
                     entityInfo.SetValue(IDGen.NextID()); 
                 }

    应该这样

    0 回复
  • 还有问题提供完整的控制台测试DEMO

    0 回复
  • 1694756187803.png

    进入DataEnecuting时,框架已经填充了,entity.Id == Guid.Empty已经进不了这个判断

    那有没有设置Id前的Aop?没有我就只能覆盖掉了。如果是特殊情况手动设置ID,我再加个隐藏Id处理吧。

    0 回复
  • 导航会自动赋值,建议雪花ID

    0 回复
  • 雪花ID是全自动的

    0 回复
  •  不需要额外配置

    0 回复
  • 看文档,雪花Id不是只能给long类型的Id赋值?我研究下

    0 回复
  • 试了下强制赋值会有个问题,导航更新重新插入从表时,Id全都刷新了。看来是不能强制覆盖Id。

    0 回复

  • 升级到这个版本, 可能要过五分钟勾一下预览

    SqlSugarCore 5.1.4.106-preview28


    AOP全部删掉用这个在程序启动时配置你的GUID

    //程序启动时配置
    StaticConfig.CustomGuidFunc = () => Guid.NewGuid();


    试一下是不是OK


    0 回复
  • 1694759850393.png

    自定义Guid委托未被调用,Guid依旧是原来的,断点未能进去

    0 回复
  • 0 回复