pgsql仓储实体批量更新对应sql数组类型错误问题 返回

SqlSugar 处理中
3 243
该叫什么 Shayne 发布于2周前
悬赏:0 飞吻

使用仓储更新时数组类型在生成的sql内被转为varchar导致更新失败,但插入没有问题

对应实体属性如下:

[SugarColumn( ColumnDataType = "bigint []", ColumnName = "cnc_ids", IsArray = true, IsNullable = true )]
public long[]? CncIds{
	get; set;
}

生成的sql:

UPDATE  "tdd"."thrid_device_integration_setting"  SET 

"device_name"=T."device_name",

"device_type"=T."device_type",

"deploy_type"=T."deploy_type",

"device_identification"=T."device_identification",

"gateway_setting_id"=T."gateway_setting_id",

"cnc_ids"=T."cnc_ids",

"send_emp_ids"=T."send_emp_ids",

"receive_emp_ids"=T."receive_emp_ids",

"modi_date"=T."modi_date",

"modi_user"=T."modi_user",

"send_times"=T."send_times" FROM  (VALUES

 (CAST('4' AS int8),

CAST('测试数据3' AS varchar),

CAST('1' AS int4),CAST('2' AS int4),

CAST('518783' AS varchar),

CAST(NULL AS int8),

CAST('{1}' AS varchar),

CAST('{1}' AS varchar),

CAST('{1}' AS varchar),

CAST('1784281380137' AS int8),

CAST('1' AS int8),CAST('9' AS int4))

 ) AS T ("device_id","device_name","device_type","deploy_type","device_identification","gateway_setting_id","cnc_ids","send_emp_ids","receive_emp_ids","modi_date","modi_user","send_times") 

WHERE "tdd"."thrid_device_integration_setting"."device_id"=T."device_id"

sqlsugar版本:5.1.4.216


热忱回答3

  • 异常:

     An unhandled exception occurred.

    Npgsql.PostgresException (0x80004005): 42804: column "cnc_ids" is of type bigint[] but expression is of type character varying

       at Npgsql.NpgsqlConnector.<ReadMessage>g__ReadMessageLong|201_0(NpgsqlConnector connector, Boolean async, DataRowLoadingMode dataRowLoadingMode, Boolean readingNotifications, Boolean isReadingPrependedMessage)

       at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming, CancellationToken cancellationToken)

       at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)

       at Npgsql.NpgsqlCommand.ExecuteReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken)

       at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)

       at SqlSugar.AdoProvider.ExecuteCommandAsync(String sql, SugarParameter[] parameters)

       at SqlSugar.UpdateableProvider`1.ExecuteCommandAsync()

       at SqlSugar.SimpleClient`1.UpdateRangeAsync(List`1 updateObjs)


    0 回复
  • 先用useParameter 方式更新,这个我确认一下。或者改成string []

    0 回复
  • @fate sta:useParameter我有尝试,在sql会变成 1, 2, 3 这种形式,缺少了{} ,这个问题只会在批量更新时出现,如果时单条更新就不会有问题

    0 回复