C# Postgres 在插入新记录后跳过 ENUM 列,并且默认值保存在数据库中。
我正在尝试向 postgres 表 EncounterBatchItem 添加新记录。似乎它在插入和采用默认值“已处理”时跳过枚举值
public enum EncounterBatchItemStatus
{
Invalid,
Processed
}
public class EncounterBatchItem
{
public long Id { get; set; }
public int EncounterBatchId { get; set; }
public int EncounterId { get; set; }
public EncounterBatchItemStatus Status { get; set; }
public long Balance { get; set; }
}
builder.Property(x => x.Status)
.IsRequired()
.HasColumnType("enum_encounter_batch_item_status")
.HasColumnName("status")
.HasDefaultValue(EncounterBatchItemStatus.Processed)
.HasConversion<EncounterBatchItemStatus>();
migrationBuilder.Sql(@"CREATE TYPE enum_encounter_batch_item_status AS ENUM (
'Invalid',
'Processed');");
var encounterBatchItem = new EncounterBatchItem
{
EncounterBatchId = 136,
EncounterId = 17,
Balance = 1000,
Errors = new List<EncounterBatchItemError>(),
Status = EncounterBatchItemStatus.Invalid
};
await _context.EncounterBatchItems.AddAsync(encounterBatchItem, cancellationToken);
await _context.SaveChangesAsync(cancellationToken);
当我检查 SQL 插入脚本时,由于某种原因它跳过了
status
列:
INSERT INTO encounter_batch_item (balance, encounter_batch_id, encounter_id, errors)
VALUES (@p4, @p5, @p6, @p7)
RETURNING id, status;
通过将
Status
更改为可为空,它可以工作,但是 Status
是必需列,所以我不想将其设为可为空。
public class EncounterBatchItem
{
public long Id { get; set; }
public int EncounterBatchId { get; set; }
public int EncounterId { get; set; }
public EncounterBatchItemStatus? Status { get; set; }
public long Balance { get; set; }
}
尝试使用
MapEnum
方法来配置此映射,请参阅 https://www.npgsql.org/efcore/mapping/enum.html?tabs=without-datasource
var dataSourceBuilder = new NpgsqlDataSourceBuilder(/* connection string */);
dataSourceBuilder.MapEnum<Mood>();
var dataSource = dataSourceBuilder.Build();
builder.Services.AddDbContext<MyContext>(options => options.UseNpgsql(dataSource));