PostgreSQL表达式更新可为空的枚举字段报错 返回

SqlSugar 沟通中
7 197

发生异常: CLR/Npgsql.PostgresException 引发的异常:“Npgsql.PostgresException”(位于 System.Private.CoreLib.dll 中): '42804: column "userstatus" is of type integer but expression is of type text'   在 Npgsql.NpgsqlConnector.<<ReadMessage>g__ReadMessageLong|201_0>d.MoveNext()   在 Npgsql.NpgsqlDataReader.<NextResult>d__44.MoveNext()   在 Npgsql.NpgsqlCommand.<ExecuteReader>d__100.MoveNext()   在 Npgsql.NpgsqlCommand.<ExecuteReader>d__100.MoveNext()   在 System.Threading.Tasks.ValueTask1.get_Result()   在 Npgsql.NpgsqlCommand.<ExecuteNonQuery>d__88.MoveNext()   在 SqlSugar.AdoProvider.<ExecuteCommandAsync>d__156.MoveNext()   在 SqlSugar.UpdateableProvider1.<ExecuteCommandAsync>d__136.MoveNext()   在 LawTotalSys.Application.Service.TestService.<TestLawyerStatusUpdateByAdapt>d__22.MoveNext() 在

ORM版本 <PackageReference Include="SqlSugarCore" Version="5.1.4.207" />

数据库类型:PostgreSQL
示例代码如下:

[SugarTable("sys_user", "用户表")]

public class SysUser

{

       /// <summary>

       /// 主键Id

       /// </summary>

[SugarColumn(ColumnDescription = "Id主键", IsPrimaryKey = true, ColumnName = "id")]

public long Id { get; set; } = YitIdHelper.NextId();


       /// <summary>

       /// 用户状态

       /// </summary>

[SugarColumn(ColumnDataType = "int", ColumnName = "userstatus")]

public UserStatus? UserStatus { get; set; }

}


public class UpdateUserInput

{

public long Id { get; set; }

public UserStatus? UserStatus { get; set; }

}


   /// <summary>

   /// 修改可为空枚举报错

   /// </summary>

   /// <returns></returns>

public async Task UpdateUserStatus(UpdateUserInput input)

{

await _db.Updateable<SysUser>()

.SetColumns(a => new SysUser()

{

UserStatus = input.UserStatus

})

.Where(a => a.Id == input.Id)

.ExecuteCommandAsync();

}

UpdateUserInput.Id=1  UserStatus不传值

AI分析原因:实际执行时,@userstatus 被 SqlSugar/Npgsql 绑定成了 text 类型的空值

热忱回答7

  • var x= input.UserStatus;

    这样试一下呢。

    0 回复
  • @fate sta:稍等,我试下

    0 回复
  • @fate sta

    var x = input.UserStatus;

    await _db.Updateable<SysUser>()

    .SetColumns(a => new SysUser()

    {

    UserStatus = x

    })

    .Where(a => a.Id == input.Id)

    .ExecuteCommandAsync();

    这样写就正常运行,不会报错

    0 回复
  • @fate sta:不更换写法的情况下有解决方案吗

    0 回复
  • @fate sta:有方案吗

    0 回复
  •  我记得修复过了,你升级最新预览版本试试

    0 回复
  • @fate sta:测试了

    <PackageReference Include="SqlSugarCore" Version="5.1.4.215-preview05" />

    还是同样的报错,column \"userstatus\" is of type integer but expression is of type text

    0 回复