Preciso definir propriedades de chave estrangeira manualmente quando altero as associações?
Estou migrando do Linq para o SQL para o Entity Framework (4.4), usando o Database First com um DbContext. Eu estou querendo saber se o seguinte comportamento é 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!
}
Em L2S, definindo oStore
associação a uma entidade também atualizariaStoreID
chave. Na EF, isso não parece estar acontecendo. Isso ocorre independentemente de as entidades serem novas ou carregadas do contexto.
Quando euSaveChanges
, salva corretamente e oStoreID
é atualizado para corresponderoffice.ID
, mas por que isso só acontece após o salvamento?
Há algo que estou perdendo ou agora devo manter as chaves estrangeiras em sincronia manualmente?
Edição da Solução: Isso é chamado de correção de propriedade e costumava ser feito automaticamente pelos proxies gerados. No entanto, comDbContext
isso não é mais o caso. De acordo comeste problema do Connect, isso é por design.
Olá, O modelo DbContext, na verdade, não gera classes que serão usadas como proxies de rastreamento de alterações - apenas proxies de carregamento lento (que não consertam). Tomamos essa decisão porque os proxies de rastreamento de mudança são complexos e têm muitas nuances que podem ser muito confusas para os desenvolvedores. Se você quiser que o reparo ocorra antes de SaveChanges, você pode chamar myContext.ChangeTracker.DetectChanges. ~ EF Team
Uma alternativa é ligarDbContext.Entry(entity)
, que irá sincronizar a entidade. Isso está descrito neste artigo:Relacionamentos e Propriedades de Navegação em "Sincronizando as alterações entre as propriedades FKs e Navegação"