Nie można zdefiniować relacji między dwoma obiektami, ponieważ są one dołączone do różnych obiektów ObjectContext

Przeczytałem kilka pytań / odpowiedzi dotyczących tego konkretnego komunikatu o błędzie, ale nie do końca rozumiem odpowiednie rozwiązanie.

Czytałem wiele razy, że powinieneś utworzyć kontekst EF4, użyć go, a następnie go pozbyć. W mojej aplikacji ładuję tu i tam elementy za pomocą różnych obiektów kontekstowych, a następnie ostatecznie chcę powiązać elementy razem.

Stworzyłem prostą aplikację konsoli, która z łatwością powoduje błąd. Schemat bardzo prosty model, a następnie kod.

Jak mogę zmusić dwa różne podmioty do współużytkowania tego samego kontekstu? Czy naprawdę muszę utworzyć nowy kontekst, ponownie załadować dwa elementy (nawet jeśli już je mam), po prostu je skojarzyć i zapisać?

Jeśli po prostu przegapiłem już istniejące, odpowiednie pytanie / odpowiedź, proszę wskazać mi właściwe miejsce.

internal class Program {

    private static void Main(string[] args) {
        DeleteAllEntities();
        CreateInitialEntities();
        Owner o = LoadOwner();
        Child c = LoadChild();
        AssociateAndSave(o, c);
    }

    private static void AssociateAndSave(Owner o, Child c) {
        using (var context = new ModelEntities()) {
            // Exception occurs on the following line.
            o.Children.Add(c);
            context.Attach(o);
            context.SaveChanges();
        }
    }

    private static Owner LoadOwner() {
        using (var context = new ModelEntities()) {
            return ((from o in context.Owners
                     select o).First());
        }
    }

    private static Child LoadChild() {
        using (var context = new ModelEntities()) {
            return ((from c in context.Children
                     select c).First());
        }
    }

    private static void CreateInitialEntities() {
        using (var context = new ModelEntities()) {
            Owner owner = new Owner();
            Child child = new Child();
            context.Owners.AddObject(owner);
            context.Children.AddObject(child);
            context.SaveChanges();
        }
    }

    private static void DeleteAllEntities() {
        using (var context = new ModelEntities()) {
            List<Child> children = (from c in context.Children
                                    select c).ToList();
            foreach (var c in children)
                context.Children.DeleteObject(c);
            List<Owner> owners = (from o in context.Owners
                                  select o).ToList();
            foreach (var o in owners)
                context.Owners.DeleteObject(o);
            context.SaveChanges();
        }
    }
}

questionAnswers(2)

yourAnswerToTheQuestion