[英]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);
}
當我現在發布類似的內容時:
{
"Name": "Test Name",
"FormFields": [
{
"Name": "Field Name",
"Value": "Field Value"
}
]
}
只設置了表單的Name
,但沒有創建新的表單字段。 甚至FromBody
返回的“項目” FromBody
只包含 Form.Name 但 FormFields 是空的。
如何通過 API 創建多個 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);
也參考多對多:
如果我理解正確Form.FormFields
總是空列表,無論輸入是什么。 如果是這種情況,其背后的原因是FormFields
沒有 setter 並且無法設置。 嘗試添加set;
用於FormFields
(不是 100% 確定,而是private set;
應該足夠了)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.