有两种选择。
如果您要放置相同的上下文和候选对象,您可以简单地将现有的候选对象添加到作业中。例如:创建您的候选人并将其保存到数据库中:
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);
将状态设置为未更改,因为我们不想创建新的候选人,只需使用现有的候选人。
newContext.Entry(existingCandidate3).State = System.Data.EntityState.Unchanged;
添加它并保存更改。
existingJob.Candidates.Add(existingCandidate3);
newContext.SaveChanges();
完毕!