我有这个简单的模型:
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?
如果我理解正确的话,无论输入是什么,
Form.FormFields
始终是空列表。如果是这种情况,其背后的原因是 FormFields
没有 setter,无法设置。尝试为 set;
添加 FormFields
(不是 100% 确定,但 private set;
应该足够了)
好的 - 为了理解有关系:
一个表单有多个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);
也供多对多参考: