我正在将应用程序从Npgsql 2.2升级到Npgsql 3.1。它使用了许多枚举,我有很多这样的错误:
Npgsql.PostgresException : 42804: column "my_column" is of type my_enum but expression is of type text
即使使用简单的INSERT,这似乎也会发生,就像这样
INSERT INTO my_table (col1, col2, col3, ...)
SELECT $1, $2, $3, ...
RETURNING 1 AS _row_affected
使用NpgsqlCommand.Parameters.AddWithValue(name, value)
将每个列值添加为参数(不指定类型)。在这种情况下,值的.NET类型为string
。
在Npgsql 2.2中,这有效,因为它透明地将文本转换为Postgres枚举,反之亦然。有没有办法在3.1中获得相同的行为?我知道它现在本地处理枚举,这可能很有用,但如果我能让枚举再次作为文本工作,它真的真的简化了升级!
答案 0 :(得分:2)
创建参数时,尝试将其NpgsqlDbType设置为Unknown,这应该使PostgreSQL透明地将文本值转换为枚举。