我使用 EDMX 架构作为我的上下文。在我之前没有使用架构的项目中,我可以像这样更改实体状态:
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
context.Products.Add(product);
else
context.Entry(product).State = EntityState.Modified;
context.SaveChanges();
}
但是在这个项目中,我没有在我的智能感知中看到 .Entry
(如果我只是输入它,它不会建议 namespace 引用)。
我试图修改一个实体并保存它。它工作正常。
所以我的两个问题是:
- 为什么 .Entry
不再出现在我的智能感知中?
- 我们真的需要用持久上下文更改实体状态,还是我们可以依靠 .Net 来正确地做到这一点?
最佳答案
我想您以前使用的是 DbContext API,但现在您使用的是 ObjectContext API - 这是使用 EF 的两种不同方式,每种方式都有自己的实现方式。检查你是否有这个(ObjectContext API):
context.ObjectStateManager.ChangeObjectState(product, EntityState.Modified);
关于你的第二个问题 - 如果你正在使用分离场景,你需要附加实体并设置状态(你的实体实例不是由保存它的同一个上下文实例加载的)。
关于c# - EF4 - Context.Entry 不可用于更改实体状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398977/