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

问题描述 投票:0回答:2

我有这个简单的模型:

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);
}

当我现在发布类似的内容时:

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

只设置了表单的

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

如何通过API创建多个FormField?

.net entity-framework asp.net-core .net-5
2个回答
2
投票

如果我理解正确的话,无论输入是什么,

Form.FormFields
始终是空列表。如果是这种情况,其背后的原因是
FormFields
没有 setter,无法设置。尝试为
set;
添加
FormFields
(不是 100% 确定,但
private set;
应该足够了)


0
投票

好的 - 为了理解有关系:

一个表单有多个FormFields


是否有正确配置的关系?

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

如果此 json 未正确将元素添加到数据库:

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

然后有一个选项可以单独添加表单字段和名称:

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

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

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

也供多对多参考:

如何在 ef 6 中插入具有多对多关系的模型

© www.soinside.com 2019 - 2024. All rights reserved.