通过 asp.net core POST 创建 EF Core 一对多关系数据

Create EF Core One-To-Many Relationship data through asp.net core POST

我有这个简单的模型:

public class Form
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string Name { get; set; }

    public List<FormField> FormFields { get; } = new List<FormField>();
}
public class FormField
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    public string Name { get; set; }
    public string Value { get; set; }
}

和控制器方法:

public IActionResult Post([FromBody] Form item)
{
    EntityEntry<Form> entityEntry = Context.Add(item);
    ModuleContext.Database.SaveChanges();
    return Ok(entityEntry.Entity);
}

当我现在 post 类似的事情时:

{
  "Name": "Test Name",
  "FormFields": [
    {
      "Name": "Field Name",
      "Value": "Field Value"
    }
  ]
}

只设置了表单的Name,没有创建新的表单域。即使 FromBody 返回的“项目”也只包含 Form.Name 但 FormFields 是空的。

如何通过 API 创建多个 FormField?

好的 - 为了理解有关系:

一个Form有多个FormField


有正确配置的关系吗?

modelBuilder.Entity< Form >()
    .HasMany(c => c.FormFields)
    .WithOne(e => e.Form);

如果 json 没有正确地将元素添加到数据库:

{
  "Name": "Test Name",
  "FormFields": [
    {
      "Name": "Field Name",
      "Value": "Field Value"
    }
  ]
}

然后有一个单独添加 FormFields 和 Name 的选项:

EntityEntry<Form> entityEntry = Context.Add(item);

foreach(field in item.FormFields){
   EntityEntry<FormFields> entityEntry = Context.Add(field);
}

ModuleContext.Database.SaveChanges();
return Ok(entityEntry.Entity);

多对多参考:

How to insert a model in ef 6 with a many to many relationship

如果我理解正确的话,Form.FormFields 无论输入什么,它总是空列表。如果是这种情况,其背后的原因是 FormFields 没有 setter 并且无法设置。尝试为 FormFields 添加 set;(不是 100% 确定,但 private set; 应该足够了)