¿Tengo que establecer las propiedades de la clave externa manualmente cuando cambio las asociaciones?

Estoy migrando de Linq-to-SQL a Entity Framework (4.4), usando Database First con un DbContext. Me pregunto si el siguiente comportamiento es normal:

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

En L2S, configurando elStore asociación a una entidad también actualizaría laStoreID llave. En EF, esto no parece estar sucediendo. Esto es independiente de si las entidades son nuevas o están cargadas desde el contexto.

Cuando yoSaveChanges, se guarda correctamente y laStoreID se actualiza para que coincidaoffice.ID, pero ¿por qué esto solo sucede después de guardar?

¿Hay algo que me falta o se supone que debo mantener las claves externas sincronizadas manualmente?

Solución de Edición: Esto se denomina corrección de propiedades y solía ser hecho automáticamente por los servidores proxy generados. Sin embargo, conDbContext este ya no es el caso De acuerdo aeste problema de conexión, esto es por diseño.

Hola, la plantilla DbContext en realidad no genera clases que se utilizarán como proxies de seguimiento de cambios, solo proxies de carga perezosa (que no se solucionan). Tomamos esta decisión porque los proxies de seguimiento de cambios son complejos y tienen muchos matices que pueden ser muy confusos para los desarrolladores. Si desea que la reparación se realice antes de SaveChanges, puede llamar a myContext.ChangeTracker.DetectChanges. ~ Equipo EF

Una alternativa es llamar.DbContext.Entry(entity), que sincronizará la entidad. Esto se describe en este artículo:Relaciones y propiedades de navegación. en "Sincronización de los cambios entre las propiedades de FK y navegación"

Respuestas a la pregunta(1)

Su respuesta a la pregunta