c# - EF4 - Context.Entry 不可用于更改实体状态

标签 c# .net entity-framework entity-framework-4

我使用 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/

相关文章:

c# - TransactionScope 和 Entity Framework

.net - 如何在.net中实现多声道音频预混器

c# - 如何去除 ToolStrip Winforms 控件一角的这种奇怪的视觉伪像?

c# - 如何报告实体对象的自定义(添加)计算属性已更改?

c# - 我自己的 OrderBy 函数

.net - 使用 PowerShell 时出现内存泄漏

c# - MS Graph - LINQ 查询返回不正确的结果

c# - 锁定 SQLite 数据库以从 C# 读取

javascript - 根据 AJAX 请求的类型显示 LoadingGif

c# - 可以给 Html.DropDownListFor() 选项标签一个值吗?