如何在新创建的对象上下文之后刷新和实体对象

时间:2013-01-17 13:57:31

标签: c# .net entity-framework

让我们说,我有EntityObject名为someProduct

//Get the object
Product someProduct = someObjectContext.Product.First();

//At runtime at some point, recreate the ObjectContext
someObjectContext = new SomeObjectContext();

//Try to refresh someProduct on the new ObjectContext
someObjectContext.Refresh(RefreshMode.StoreWins, someProduct);

当第三行执行时,它会抛出异常:

  

要刷新的对象集合中索引0处的元素具有null EntityKey属性值,或者未附加到此ObjectStateManager。

这是在新创建的EntityObject上刷新ObjectContext的正确方法吗?

修改

ObjectContext的原因是刷新所有脏EntityObjects

3 个答案:

答案 0 :(得分:2)

首先在刷新前将实体附加到上下文

someObjectContext.Products.Attach(someProduct);

someObjectContext.Set<Product>().Attach(someProduct);

应该这样做。

答案 1 :(得分:1)

由于someProduct是使用不同的ObjectContext检索的,因此您需要使用someObjectContext.Attach(someProduct)

刷新用于刷新ObjectContext的缓存,它需要从同一个对象上下文中选择的实体。

祝你好运

答案 2 :(得分:0)

您应该将某个产品附加到对象,然后才能刷新该对象。

此刷新用于刷新先前创建的与对象内容相关的缓存。

我在项目中使用了以下代码。它工作正常。

objectContext.attach(someProduct);