EF4 – Context.Entry不可用于更改实体状态

我使用EDMX模式作为我的上下文。 在我之前没有使用模式的项目中,我可以像这样更改实体状态:

public void SaveProduct(Product product) { if (product.ProductID == 0) context.Products.Add(product); else context.Entry(product).State = EntityState.Modified; context.SaveChanges(); } 

但是在这个项目中,我没有在intellisense中看到.Entry (如果我输入它,它就不会建议命名空间引用)。

我试图修改一个实体并保存它。 它运作正常。

所以我的两个问题是: – 为什么.Entry不在我的intellisense了? – 我们真的需要用持久的上下文来改变实体状态,还是我们可以依靠.Net来做到这一点?

我想之前您使用的是DbContext API,但现在您正在使用ObjectContext API – 这是使用EF的两种不同方式,每种方法都有自己的方法。 检查你是否有这个(ObjectContext API):

 context.ObjectStateManager.ChangeObjectState(product, EntityState.Modified); 

对于您的第二个问题 – 如果您正在使用分离方案,则需要附加实体和设置状态(您的实体实例未被保存的相同上下文实例加载)。