Kac*_*oha 4 entity-framework npgsql ef-core-2.1
使用 EF-Core for PostgresSQL,我有一个具有 type 字段的实体byte,但决定将其更改为 type byte[]。但是当我进行迁移时,在应用生成的迁移文件时,它引发了以下异常:
Npgsql.PostgresException (0x80004005): 42804: 列“Logo”无法自动转换为类型 bytea
我在互联网上搜索了解决方案,但我看到的只是其他数据类型的类似问题,而不是字节数组。请帮忙。
该错误准确地说明了正在发生的情况...在某些情况下,PostgreSQL 允许更改列类型(例如int-> bigint),但在许多情况下,此类更改非常重要或具有潜在的破坏性,它拒绝自动执行此操作。在这种特定情况下,发生这种情况是因为 Npgsql 将 CLR 字节字段映射为 PostgreSQL smallint(2 字节字段),因为 PostgreSQL 缺少 1 字节数据字段。所以 PostgreSQL 拒绝将 from 转换smallint为 to bytea,这是有道理的。
smallint但是,您仍然可以通过自己编写数据转换(从到 )来进行迁移bytea。为此,请编辑生成的迁移,找到该ALTER COLUMN ... ALTER TYPE语句并添加一个USING子句。正如 PostgreSQL 文档所说,这允许您根据现有列(甚至其他列)为该列提供新值。特别是将 int (或smallint)转换为 bytea,请使用以下命令:
ALTER TABLE tab ALTER COLUMN col TYPE BYTEA USING set_bytea(E'0', 0, col);
Run Code Online (Sandbox Code Playgroud)
如果您现有的列碰巧包含多个字节(对您来说不应该是问题),它应该被截断。显然要仔细测试由此得出的数据。
| 归档时间: |
|
| 查看次数: |
8508 次 |
| 最近记录: |