Нужно ли вручную устанавливать свойства внешнего ключа при изменении связей?
m переход с 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 и свойствами навигации »