通过 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;
应该足够了)
我有这个简单的模型:
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;
应该足够了)