You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core (Code First) 一对多关系下数据种子(Seed)执行失败问题求助

问题解决方法

核心错误原因

EF Core 的 HasData 种子数据接口不支持直接设置实体的导航属性,只能通过显式赋值外键字段建立关联。你代码里两处不符合要求:

  • 初始化 TblAnswerItem 实例时传入了 Question1 导航属性对象,触发了 EF Core 的种子数据校验规则
  • 手动向 Question1.AnswerList 添加答案实例的操作对 HasData 无效,不需要写这部分逻辑

修正后的种子数据代码

你只需要修改 OnModelCreating 方法里的种子数据部分即可:

//Seed data
TblQuestionItem Question1 = new TblQuestionItem(1, "Who is the CEO of SpaceX ?");

// 初始化答案时不要传入Question导航属性实例,只需要给FkQuestionID赋值对应问题的ID
TblAnswerItem Answer1 = new TblAnswerItem(1, "Jeff Bezos", 1);
TblAnswerItem Answer2 = new TblAnswerItem(2, "Elon Musk", 1);
TblAnswerItem Answer3 = new TblAnswerItem(3, "Bill Gates", 1);
TblAnswerItem Answer4 = new TblAnswerItem(4, "Sundar Pichai", 1);
               
builder.Entity<TblQuestionItem>().HasData(Question1);
       
builder.Entity<TblAnswerItem>().HasData(Answer1);
builder.Entity<TblAnswerItem>().HasData(Answer2);
builder.Entity<TblAnswerItem>().HasData(Answer3);
builder.Entity<TblAnswerItem>().HasData(Answer4);

额外注意事项

如果你的 TblAnswerItem 构造函数强制要求传入 TblQuestionItem 类型参数,你可以调整构造函数,或者改用对象初始化器赋值,避免传入导航属性:

TblAnswerItem Answer1 = new TblAnswerItem(1, "Jeff Bezos", 1)
{
    // 不要给Question导航属性赋值
};

内容的提问来源于stack exchange,提问作者Bluemarble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:06:02