[ACCEPTED]-Refresh entity instance with DbContext-ef-code-first

Accepted answer
Score: 57

You must use this:

public void Refresh(Document instance)


Score: 26

The above doesn't work. Reload() method 8 does not correctly refresh the entity from 7 the database. It performs SQL select query 6 but does not build proxies for the navigational 5 properties. See the example below (I use 4 the Northwind database in SQL Server with 3 EF 5.1):

NorthwindEntities northwindEntities = new NorthwindEntities();
Product newProduct = new Product
    ProductName = "new product",
    Discontinued = false,
    CategoryID = 3

// 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!
Console.WriteLine(newProduct.Category); // null (reload doesn't help)

// Detach the object from the context

// 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)

I may conclude that real refresh 2 / reload of EF entity can be done by Detach 1 + Find:

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


More Related questions