我正在努力在编辑帖子操作中更新相关实体。
我有一个Job和JobNotes模型,如下所示:
public class Job
{
public Job()
{
JobNotes = new List<JobNote>();
}
[Key]
public int JobID { get; set; }
public string jobName { get; set; }
public ICollection<JobNote> JobNotes { get; set; }
}
public class JobNote
{
[Key]
public int JobNoteID { get; set; }
public string Author { get; set; }
public string Note { get; set; }
public Job Job { get; set; }
}
我还使用Fluent API来映射我的关系:
(关于我是否正确完成此操作的任何反馈都是最受欢迎的!)
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Job>()
.HasMany(x => x.JobNotes)
.WithOptional(y => y.Job);
}
问题是在我的Post方法中,我的JobNotes对象被添加到父Job对象,但没有保存到数据库。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(JobViewModel model)
{
if (ModelState.IsValid)
{
var existingJob = db.Jobs
.Include(x => x.JobNotes)
.Single(c => c.JobID == model.Job.JobID);
model.Job.JobNotes.Add(new JobNote
{
Author = "System",
Note = "Job modified by " + User.Identity.Name
});
db.Entry(existingJob).CurrentValues.SetValues(model.Job);
db.SaveChanges();
return RedirectToAction("Details", new { id = model.Job.JobID });
}
}
我做错了什么?在此先感谢您的帮助。
答案 0 :(得分:2)
使用existingJob
代替model.Job
添加新的JobNote
:
existingJob.JobNotes.Add(...);
当调用SaveChanges
时,EF会检测到新笔记(基于已经附加的existingJob
)并将其添加到上下文中,然后插入到数据库中。
顺便说一下,您不需要在此过程中包含现有注释,因此您可以删除.Include(x => x.JobNotes)
。