Czy muszę ręcznie ustawiać właściwości klucza obcego, gdy zmieniam skojarzenia?

Przeprowadzam migrację z Linq-SQL do Entity Framework (4.4), używając bazy danych First z DbContext. Zastanawiam się, czy następujące zachowanie jest normalne:

using (var e = new AgendaEntities()) {
    var store = e.Stores.First();
    var office = e.Offices.Create();
    office.Store = store; // Set association
    Console.WriteLine(office.StoreID); // shows Guid.Empty, expected store.ID!
}

W L2S, ustawianieStore skojarzenie z jednostką również zaktualizowałobyStoreID klawisz. W EF wydaje się, że tak się nie dzieje. Dzieje się tak niezależnie od tego, czy elementy są nowe czy załadowane z kontekstu.

Kiedy jaSaveChanges, zapisuje poprawnie iStoreID jest aktualizowany, aby pasowałoffice.ID, ale dlaczego tak się dzieje dopiero po zapisaniu?

Czy czegoś brakuje, czy mam teraz synchronizować klucze zagraniczne ręcznie?

Edycja rozwiązania: Nazywa się to naprawianiem właściwości i było wykonywane automatycznie przez wygenerowane proxy. Jednak zDbContext to już nie przypadek. Wedługten problem z połączeniem, to z założenia.

Witaj, szablon DbContext w rzeczywistości nie generuje klas, które będą używane jako proxy śledzenia zmian - tylko leniwe ładowanie proxy (które nie robią naprawiania). Podjęliśmy tę decyzję, ponieważ proxy śledzenia zmian są złożone i mają wiele niuansów, które mogą być bardzo mylące dla programistów. Jeśli chcesz, aby poprawka wystąpiła przed SaveChanges, możesz wywołać myContext.ChangeTracker.DetectChanges. ~ Zespół EF

Alternatywą jest zadzwonićDbContext.Entry(entity), który zsynchronizuje obiekt. Jest to opisane w tym artykule:Relacje i właściwości nawigacji w sekcji „Synchronizacja zmian między FK a właściwościami nawigacji”

questionAnswers(1)

yourAnswerToTheQuestion