【发布时间】:2021-04-26 20:28:15
【问题描述】:
我在 DataSeeding 中遇到 EF Core 迁移问题。我有以下实体配置:
public void Configure(EntityTypeBuilder<ChartOptionsModel> builder)
{
builder.ToTable("charts_options");
//Columns description
builder.Property(s => s.Id)
.UseIdentityColumn()
.HasColumnName("id")
.HasColumnType("bigint");
builder.Property(s => s.GroupId)
.HasColumnName("group_id")
.HasColumnType("bigint")
.HasDefaultValue(1);
builder.Property(s => s.Type)
.HasColumnName("type")
.HasColumnType("varchar(50)")
.HasDefaultValue("");
builder.Property(s => s.Title)
.HasColumnName("title")
.HasColumnType("text")
.HasDefaultValue("");
builder.Property(s => s.LabelFormatter)
.HasColumnName("label_formatter")
.HasColumnType("text")
.HasDefaultValue("");
builder.Property(s => s.ShowChart)
.HasColumnName("show_chart")
.HasColumnType("boolean")
.HasDefaultValue(true);
//Keys
builder.HasKey(s => s.Id)
.HasName("charts_options_pkey");
//FK
builder.HasOne(s => s.Group)
.WithMany(s => s.ChartsOptions)
.HasForeignKey(s => s.GroupId)
.HasConstraintName("charts_options_group_id_fkey");
//Indices
builder.HasIndex(s => s.GroupId)
.HasDatabaseName("charts_options_group_id_idx");
builder.HasData(ChartsOptionsSeedingData.ChartsOptions);
}
当我使用Add-Migration [Migration name] 创建迁移时,我在迁移的BuildTargetModel 方法中得到了这个:
modelBuilder.Entity("DatabaseManagerService.Database.Models.Charts.ChartOptionsModel", b =>
{
//other fields
b.Property<bool>("ShowChart")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(true)
.HasColumnName("show_chart");
b.Property<string>("Title")
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("")
.HasColumnName("title");
b.Property<string>("Type")
.ValueGeneratedOnAdd()
.HasColumnType("varchar(50)")
.HasDefaultValue("")
.HasColumnName("type");
//other fields
b.ToTable("charts_options");
b.HasData(
new
{
Id = 1L,
GroupId = 1L,
LabelFormatter = "`${vals[0]} of ${vals[0] + vals[1]}`",
ShowChart = false,
Title = "AHU In Local",
Type = "AHUInLocalChart"
},
new
{
Id = 2L,
GroupId = 1L,
LabelFormatter = "`${vals[0]} of ${vals[0] + vals[1]}`",
ShowChart = false,
Title = "FQC In Local",
Type = "FQCInLocalChart"
},
// other values here
);
});
Up方法中建表没问题,但是插入数据很麻烦:
migrationBuilder.InsertData(
table: "charts_options",
columns: new[] { "id", "group_id", "label_formatter", "title", "type" },
values: new object[,]
{
{ 1L, 1L, "`${vals[0]} of ${vals[0] + vals[1]}`", "AHU In Local", "AHUInLocalChart" },
{ 21L, 3L, "`${vals[0]} of ${vals[0] + vals[1]}`", "HТ OK", "HTOkChart" },
//rest of the values
});
问题是,虽然ShowChart属性的默认值为true,并且在模型快照中我有前两行数据的ShowChart = false,但生成的insert语句没有列 show_chart,以及相应的值 - false。
我做错了什么配置,还是这是预期的行为?
最好的问候,
朱利安
【问题讨论】:
标签: entity-framework-core ef-code-first ef-core-3.1