Нужно ли вручную устанавливать свойства внешнего ключа при изменении связей?

Я перехожу с Linq-to-SQL на Entity Framework (4.4), используя Database First с DbContext. Мне интересно, нормально ли следующее поведение:

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!
}

В L2S настройкаStore ассоциация с объектом также обновитStoreID ключ. В EF этого не происходит. Это независимо от того, являются ли объекты новыми или загруженными из контекста.

Когда яSaveChanges, он сохраняет правильно иStoreID обновляется, чтобы соответствоватьoffice.ID, но почему это происходит только после сохранения?

Что-то мне не хватает, или я теперь должен синхронизировать внешние ключи вручную?

Решение Редактировать: Это называется фиксацией свойств и используется автоматически сгенерированными прокси. Однако сDbContext это больше не так. Согласно сэта проблема подключенияэто по замыслу.

Здравствуйте, шаблон DbContext на самом деле не генерирует классы, которые будут использоваться в качестве прокси отслеживания изменений - просто ленивые загрузочные прокси (которые не исправляют). Мы приняли это решение, потому что прокси отслеживания изменений сложны и имеют много нюансов, которые могут очень запутать разработчиков. Если вы хотите, чтобы исправление произошло до SaveChanges, вы можете вызвать myContext.ChangeTracker.DetectChanges. ~ EF Team

Альтернатива - позвонитьDbContext.Entry(entity), который будет синхронизировать сущность. Это описано в этой статье:Отношения и свойства навигации в разделе «Синхронизация изменений между FK и свойствами навигации»

Ответы на вопрос(1)

Ваш ответ на вопрос