entity-framework - 附加和 EntityState.Detached

标签 entity-framework

为什么在这篇文章中: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application 我们在 Delete 方法中检查了 EntityState.Detached,然后在 Attach 中检查,而在 Update 方法中我们没有检查:

    public virtual void Delete(TEntity entityToDelete)
    {
        if (context.Entry(entityToDelete).State == EntityState.Detached)
        {
            dbSet.Attach(entityToDelete);
        }
        dbSet.Remove(entityToDelete);
    }

    public virtual void Update(TEntity entityToUpdate)
    {
        dbSet.Attach(entityToUpdate);
        context.Entry(entityToUpdate).State = EntityState.Modified;
    }

最佳答案

两者不同的原因是因为在教程中还有另一个调用删除的方法:

    public virtual void Delete(object id)
    {
        TEntity entityToDelete = dbSet.Find(id);
        Delete(entityToDelete);
    }

因此,如果从客户端事件调用 Delete(TEntity entityToDelete) - 它应该像在 Update 方法中一样首先附加,但如果它是作为服务器端处理的一部分从 Delete(object id) 调用的,它将已经附上。

为了安全起见:最好在进行更改之前始终检查它是否已附加,特别是:考虑到将来修订可能会发布一个可以调用的服务器方法也以同样的方式更新方法。

关于entity-framework - 附加和 EntityState.Detached,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771662/

相关文章:

c# - 优化 LINQ 例程

c# - 哪里的条件可以是 EF 中的列表?

c# - 创建一个平台来处理未知实体的 CRUD 场景

c# - 这是一种安全且*相对可行*的异步记录某些事件的方法吗?

c# - 自动化 mdb 到 sql server

c# - Linq - 按日期分组并选择计数

c# - EF Core 无法连接到服务器 - 与网络相关或特定于实例的错误

asp.net - 使用 EF Code First 添加 SqlMembership 表

c# - Entity Framework 更新错误

c# - html:点击 href 链接后执行其他操作