尽管具有 FK 值,EF Core 6 播种数据仍会出现外键错误

EF Core 6 Seeding Data Gives Foreign Key error Despite Having FK Value

所以,我已经为此苦苦挣扎了一段时间,无法弄清楚我错过了什么。我有一个 table 包含一个名为 Skill 的实体,DataModel 看起来像这样:

public class SkillModel
{
    public SkillModel()
    {
    }

    public SkillModel(int skillId)
    {
        SkillId = skillId;
    }

    public int SkillId { get; set; } = 0;
    public string Name { get; set; } = "";
    public Guid DescriptionId { get; set; } = new();
    public int SkillGroupId { get; set; } = 0;
    public SkillGroupModel SkillGroup { get; set; } = new();
}

它引用了它自己的 SkillGroup table,它看起来像这样:

public class SkillGroupModel
{
    public SkillGroupModel()
    {
    }

    public SkillGroupModel(int skillGroupId)
    {
        SkillGroupId = skillGroupId;
    }

    public int SkillGroupId { get; set; } = 0;
    public string Name { get; set; } = "";
    public Guid DescriptionId { get; set; } = new();
    public List<SkillModel> Skills { get; set; } = new();
}

他们每个人都有自己的配置文件,看起来像这样:

技能模型

public class SkillConfiguration : IEntityTypeConfiguration<SkillModel>
{
    public void Configure(EntityTypeBuilder<SkillModel> builder)
    {
        var dataSeeds = new DataSeeds();
        builder.ToTable("Skills", "Skills");
        builder.HasKey(k => k.SkillId);
        builder.HasOne(s => s.SkillGroup)
            .WithMany(s => s.Skills);
        builder.HasData(dataSeeds.Skills);
    }
} 

技能组模型

var dataSeeds = new DataSeeds();
builder.ToTable("SkillGroups", "Skills")
       .HasKey(k => k.SkillGroupId);

builder.HasData(dataSeeds.SkillGroups); 

数据种子如下所示:

SkillGroupModel 种子

public List<SkillGroupModel> GetSkillGroups()
{
    return new List<SkillGroupModel>()
    {
        new()
        {
            SkillGroupId = 1, Name = "Artisan", DescriptionId = SkillGroupDescriptions["Artisan"].Id
        },
    ...
}

技能模型种子

return new List<SkillModel>()
    {
        new()
        {
            SkillId = 1,
            Name = "Aesthetics",
            DescriptionId = SkillDescriptions["Aesthetics"].Id,
            SkillGroupId = 1
        },
     ...
}

所以,我显然遗漏了一些东西。 Ivan Stoev 没有像那样初始化我的导航属性,这很有帮助。

我通过不使用我的导航属性而只设置 FK 属性来解决这个问题。我想在过去我试图同时做这两件事,这导致了让我走上这条路的问题。我不确定我之前做错了什么,但在返回并再次尝试后,MSDN 上用于播种数据的文档对我来说效果很好。