让我们说,我有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
。
答案 0 :(得分:2)
首先在刷新前将实体附加到上下文
someObjectContext.Products.Attach(someProduct);
或
someObjectContext.Set<Product>().Attach(someProduct);
应该这样做。
答案 1 :(得分:1)
由于someProduct是使用不同的ObjectContext检索的,因此您需要使用someObjectContext.Attach(someProduct)
。
刷新用于刷新ObjectContext的缓存,它需要从同一个对象上下文中选择的实体。
祝你好运答案 2 :(得分:0)
您应该将某个产品附加到对象,然后才能刷新该对象。
此刷新用于刷新先前创建的与对象内容相关的缓存。
我在项目中使用了以下代码。它工作正常。
objectContext.attach(someProduct);