fix: 修复套餐草稿默认值哨兵问题

This commit is contained in:
2025-12-15 21:09:28 +08:00
parent fd377624d8
commit e39a42b74c

View File

@@ -680,10 +680,12 @@ public sealed class TakeoutAppDbContext(
builder.Property(x => x.PublishStatus) builder.Property(x => x.PublishStatus)
.HasConversion<int>() .HasConversion<int>()
.HasDefaultValue(TenantPackagePublishStatus.Draft) .HasDefaultValue(TenantPackagePublishStatus.Draft)
.HasSentinel((TenantPackagePublishStatus)(-1))
.HasComment("发布状态0=草稿1=已发布。"); .HasComment("发布状态0=草稿1=已发布。");
// 1. 解决 EF Core 默认值哨兵问题:当我们希望插入 false/0 时,若数据库配置了 default 且 EF 认为该值是“未设置”,会导致 insert 省略列,最终落库为默认值。 // 1. 解决 EF Core 默认值哨兵问题:当我们希望插入 false/0 时,若数据库配置了 default 且 EF 认为该值是“未设置”,会导致 insert 省略列,最终落库为默认值。
// 2. (空行后) 将哨兵值设置为数据库默认值true 作为哨兵false 才会被显式写入,从而保证“可见性/可售开关”在新增时可正确落库 // 2. (空行后) 发布状态使用 -1 作为哨兵,避免 Draft=0 被误判为“未设置”而触发数据库默认值(发布/草稿切换必须可控)
// 3. (空行后) 将布尔开关哨兵值设置为数据库默认值true 作为哨兵false 才会被显式写入,从而保证“可见性/可售开关”在新增时可正确落库。
builder.Property(x => x.IsPublicVisible) builder.Property(x => x.IsPublicVisible)
.HasDefaultValue(true) .HasDefaultValue(true)
.HasSentinel(true) .HasSentinel(true)