如何通过ASP.NET Core POST接口创建EF Core一对多关联数据
问题根因
- JSON反序列化绑定失败:
Form类的FormFields属性仅设置了get访问器,属于只读属性。ASP.NET Core默认的JSON序列化器不会向只读集合属性中填充请求传入的元素,导致你拿到的item参数中FormFields集合始终为空。 - 实体关联关系缺失:
Form和FormField的一对多关联没有显式配置外键,即便绑定成功,EF Core也无法识别关联关系,不会自动级联保存FormField数据。
修复步骤
- 第一步:修改
Form类的FormFields属性,添加set访问器,允许反序列化器为属性赋值:
public class Form { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } public string Name { get; set; } // 新增set访问器 public List<FormField> FormFields { get; set; } = new List<FormField>(); }
- 第二步:补全
FormField类的外键配置,建立完整的一对多关联:
public class FormField { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } // 新增关联Form的外键字段 public long FormId { get; set; } public string Name { get; set; } public string Value { get; set; } // 可选:新增反向导航属性,便于EF Core自动识别关系 public Form Form { get; set; } }
- 第三步:无需修改原有控制器逻辑,EF Core默认开启级联保存,调用
SaveChanges时会自动插入关联的FormField记录,且自动填充FormId外键值。
修改完成后你原本的POST请求格式不需要调整,直接调用接口即可同时创建Form和关联的所有FormField数据。
内容的提问来源于stack exchange,提问作者PascalTurbo
相关产品推荐
相关产品推荐

