私は次のクラスを持っています:
public class Person {
public int Id {get; set;}
...
public ICollection<PersonalJobs> Jobs {get; set;}
}
public class PersonalJob {
public int Id {get; set;}
public int PersonId {get; set;}
public int JobId {get; set;}
public Job Job {get; set;}
public DateTime StartDate {get; set;}
...
}
public class Job {
public int Id {get; set;}
public string Description {get; set;}
...
}
今、私は次のようなことをします:
var _personId = 1;
var _jobId = 15;
_context.Set<Jobs>().Load(); //Pre-Load all jobs
var _person = _context.Persons.Include(p => p.Jobs.Select(j => j.Job))
.SingleOrDefault(p => p.Id == _personId);
var _job = _person.Jobs.SingleOrDefault(p => p.JobId == _jobId);
_job.JobId = 23; //Change the job that this person is tied to.
// At this point, if I try to access _job.Job.Description, it still references the old job.
コンテキストにはすでにジョブがロードされているため、IDを変更するとEFが_jobのナビゲーションプロパティを更新すると想定しました。ただし、そうではありません。この場合、_job.Jobは、元のID(15)に関連付けられたジョブを引き続き参照します。
EFがナビゲーションプロパティを処理する方法についての私の仮定が間違っているのでしょうか、それともこのパズルのピースが欠けているだけでしょうか?
ありがとう。