update referencia reciente proyecto modified mas maestro hacer hace framework entitystate entidad ejemplo detalle datos con actualizar entity-framework-4 entity-framework-ctp5 ef-code-first

entity-framework-4 - referencia - maestro detalle entity framework



Actualizar instancia de entidad con DbContext (3)

Debes usar esto:

public void Refresh(Document instance) { _ctx.Entry<Document>(instance).Reload(); }

Con EF4 CTP5 DbContext, ¿cuál es el equivalente de esto?

public void Refresh(Document instance) { _ctx.Refresh(RefreshMode.StoreWins, instance); }

He intentado esto pero no hace lo mismo, actualizando la instancia

public void Refresh(Document instance) { _ctx.ChangeTracker.DetectChanges(); }

?


Encontré que la recarga falla en las entidades proxy que tienen propiedades de navegación.

Como solución, reinicie los valores actuales y luego vuelva a cargar así:

var entry =_ctx.Entry<Document>(instance); entry.CurrentValues.SetValues(entry.OriginalValues); entry.Reload();


Lo anterior no funciona. El método Reload () no actualiza correctamente la entidad de la base de datos. Realiza una consulta de selección de SQL pero no genera proxies para las propiedades de navegación. Vea el ejemplo a continuación (uso la base de datos Northwind en SQL Server con EF 5.1):

NorthwindEntities northwindEntities = new NorthwindEntities(); Product newProduct = new Product { ProductName = "new product", Discontinued = false, CategoryID = 3 }; northwindEntities.Products.Add(newProduct); northwindEntities.SaveChanges(); // Now the product is stored in the database. Let''s print its category Console.WriteLine(newProduct.Category); // prints "null" -> navigational property not loaded // Find the product by primary key --> returns the same object (unmodified) // Still prints "null" (due to caching and identity resolution) var productByPK = northwindEntities.Products.Find(newProduct.ProductID); Console.WriteLine(productByPK.Category); // null (due to caching) // Reloading the entity from the database doesn''t help! northwindEntities.Entry<Product>(newProduct).Reload(); Console.WriteLine(newProduct.Category); // null (reload doesn''t help) // Detach the object from the context ((IObjectContextAdapter)northwindEntities).ObjectContext.Detach(newProduct); // Now find the product by primary key (detached entities are not cached) var detachedProductByPK = northwindEntities.Products.Find(newProduct.ProductID); Console.WriteLine(detachedProductByPK.Category); // works (no caching)

Puedo concluir que la actualización / recarga real de la entidad EF se puede realizar mediante Detach + Find:

((IObjectContextAdapter)context).ObjectContext.Detach(entity); entity = context.<SomeEntitySet>.Find(entity.PrimaryKey);

Nakov