从SQLite迁移到PostgreSQL:.NET 6的byte[]和DateTime类型映射咨询
C# 类型到PostgreSQL 14.6的正确类型映射方案
针对你的User实体类中的字段,对应的PostgreSQL类型如下:
1. byte[]类型(PasswordHash、PasswordSalt)
PostgreSQL中对应bytea类型,这是专门用于存储二进制数据的类型,能完美匹配C#的byte[]。
2. DateTime类型(TokenCreated、TokenExpires)
推荐使用timestamp with time zone(可简写为timestamptz),它会存储带时区的时间,和.NET的DateTime(当Kind为Utc或Local时)兼容性更好,能避免时区转换问题。如果业务不需要时区信息,也可以用timestamp without time zone(简写timestamp),但前者适配性更强。
完整DDL示例(my_user表)
CREATE TABLE my_user ( id SERIAL PRIMARY KEY, username VARCHAR(255) NOT NULL UNIQUE, password_hash bytea NOT NULL, password_salt bytea NOT NULL, token_created timestamptz NOT NULL, token_expires timestamptz NOT NULL -- 可根据你的实体补充其他字段 );
额外提示
如果用EF Core 6的Npgsql提供程序做迁移,它会自动完成这些类型映射,无需手动编写DDL;若手动维护脚本,注意bytea无需指定长度,PostgreSQL会自动处理存储大小,timestamptz支持精确到微秒的时间存储,和.NET的DateTime精度完全匹配。
内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ
相关产品推荐
相关产品推荐

