2 つのオプションがあります。
同じコンテキストと候補オブジェクトを配置する場合は、既存の候補オブジェクトをジョブに追加するだけです。例: 候補者を作成し、データベースに保存します。
JobsContext context = new JobsContext();
var candidate1 = new Candidate() { Name = "John Smith" }; //id 1
var candidate2 = new Candidate() { Name = "Jane Smith" }; //id 2
var candidate3 = new Candidate() { Name = "John Doe" }; //id 3
context.Candidates.Add(candidate1);
context.Candidates.Add(candidate2);
context.Candidates.Add(candidate3);
context.SaveChanges();
次に、ジョブを作成します。
var job = new Job() { Name = "Good Job" }; //id 1
最後に、候補者を新しいjob
変数に追加し、ジョブをコンテキストに追加して、変更を保存します。
job.Candidates.Add(candidate1);
job.Candidates.Add(candidate2);
context.Jobs.Add(job);
context.SaveChanges();
また
候補を作成したコンテキストとは異なるコンテキストを使用している場合は、新しい候補オブジェクトを作成し、それをジョブに追加する前にコンテキストに添付できます。
//different context from above example
JobsContext newContext = new JobsContext();
//this can be a new or existing job, using the job from the example above here
var existingJob = newContext.Jobs.FirstOrDefault(j => j.Id == 1);
IDのみを設定して候補オブジェクトを作成します
var existingCandidate3 = new Candidate() { Id = 3 };
オブジェクトを新しいコンテキストにアタッチします。 注: 上記の例のコンテキストがまだ残っている場合は、既に候補を追跡しているため、これを行うことはできません。
newContext.Candidates.Attach(existingCandidate3);
新しい候補を作成したくないので、状態を Unchanged に設定します。既存の候補をそのまま使用します。
newContext.Entry(existingCandidate3).State = System.Data.EntityState.Unchanged;
追加して変更を保存します。
existingJob.Candidates.Add(existingCandidate3);
newContext.SaveChanges();
終わり!