使用 web api 发布/创建子实体对象时如何设置父实体 ID
Posted
技术标签:
【中文标题】使用 web api 发布/创建子实体对象时如何设置父实体 ID【英文标题】:How to set parent entity Id when posting/creating child entity object with web api 【发布时间】:2021-10-10 08:20:36 【问题描述】:我有两个 Entity-Framework 实体(一个子“Note”,属于一个文件夹)和每个的脚手架 web api。我可以创建文件夹并希望能够向这些文件夹添加注释。
public class Note
public int Id get; set;
[MaxLength(50), Required]
public string NoteTitle get; set;
[MaxLength(1000), Required]
public string NoteContent get; set;
public NoteFolder NoteFolder get; set;
public class NoteFolder
public int Id get; set;
public string FolderName get; set;
我的帖子:
let Note =
"NoteTitle": this.NoteTitle(),
"NoteContent": this.NoteContent(),
"NoteFolder_Id:": ParentFolderId
;
$.ajax(
url: `http://localhost:52657/api/Notes`,
type: 'POST',
dataType: 'json',
contentType: 'application/json',
success: function (data)
window.location.replace("http://localhost:52657/");
alert(`Successfully Created New Note: $Note.NoteTitle`)
,
data: JSON.stringify(Note)
);
端点:
// POST: api/Notes
[ResponseType(typeof(Note))]
public IHttpActionResult PostNote(Note note)
if (!ModelState.IsValid)
return BadRequest(ModelState);
db.Notes.Add(note);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new id = note.Id , note);
每当我发出发布请求时,都会创建注释,但我的数据库中的外键行 NoteFolder_Id 为空。如何解决这个问题?
编辑:我试过发帖:
"NoteFolder": "Id": ParentFolderId
以便它可以正确序列化,但这会导致在数据库中创建一个新文件夹,其 ID 会自动递增,并且创建的 Note 会引用该文件夹。
【问题讨论】:
【参考方案1】:更改 Note 类并执行迁移,
public class Note
public int Id get; set;
[MaxLength(50), Required]
public string NoteTitle get; set;
[MaxLength(1000), Required]
public string NoteContent get; set;
public int? FolderId get; set;
[ForeignKey("FolderId")]
public NoteFolder NoteFolder get; set;
然后以表格形式发送帖子:
let Note =
"NoteTitle": this.NoteTitle(),
"NoteContent": this.NoteContent(),
"FolderId": ParentFolderId
;
修复了问题。
仍然不确定为什么传递 NoteFolder 对象会导致在数据库中创建一个新文件夹。 https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx本站使用我的初始模型样式来映射1:n。
【讨论】:
以上是关于使用 web api 发布/创建子实体对象时如何设置父实体 ID的主要内容,如果未能解决你的问题,请参考以下文章