1

[投稿の編集] アクションで関連エンティティを更新するのに苦労しています。

次のような 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 });
    }
}

私は何を間違えましたか?よろしくお願いします。

4

1 に答える 1

2

新しい を追加するには、 のexistingJob代わりにを使用します。model.JobJobNote

existingJob.JobNotes.Add(...);

SaveChanges呼び出されると、EF は (既に添付されている に基づいてexistingJob) 新しいメモを検出し、それをコンテキストに追加してからデータベースに挿入します。

ところで、この手順に既存のメモを含める必要はないため、.Include(x => x.JobNotes).

于 2013-09-07T12:42:16.867 に答える