Dostępne są dwie opcje.
Jeśli zamierzasz kłaść ten sam kontekst i obiekty kandydujące, możesz po prostu dodać istniejące obiekty kandydata do zadania. Na przykład: Załóż kandydatów i zapisać je do bazy danych:
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();
Następnie utwórz zadanie:
var job = new Job() { Name = "Good Job" }; //id 1
Wreszcie dodać kandydatów do nowej job
zmiennej, dodać zadanie do kontekst i zapisz zmiany.
job.Candidates.Add(candidate1);
job.Candidates.Add(candidate2);
context.Jobs.Add(job);
context.SaveChanges();
LUB
Jeśli używasz innego kontekstu z utworzonego kandydatów z jednej, to można utworzyć nowy obiekt kandydata i dołączyć go do kontekstu przed dodaniem go do praca.
//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);
Tworzenie nasz obiekt kandydata poprzez ustawienie tylko identyfikator
var existingCandidate3 = new Candidate() { Id = 3 };
dołączyć obiekt do nowego kontekstu. Uwaga: jeśli kontekst z powyższego przykładu jest nadal w pobliżu, nie pozwoli ci to zrobić, ponieważ już śledzi kandydata.
newContext.Candidates.Attach(existingCandidate3);
Ustaw stan na niezmienionym poziomie od nie chcemy tworzyć nowego kandydata, wystarczy użyć istniejącego.
newContext.Entry(existingCandidate3).State = System.Data.EntityState.Unchanged;
Dodaj i zapisz zmiany.
existingJob.Candidates.Add(existingCandidate3);
newContext.SaveChanges();
Zrobione!
W drugim bloku kodu, doda on nowe rekordy. – cbeckner
@ cakerner o tym, jak nazwiesz 'context.Jobs.Attach (new Job {Id = salesJobId});' first? –
To by to zrobiło. – cbeckner