Entity framework 附加和实体状态。已分离

Entity framework 附加和实体状态。已分离,entity-framework,Entity Framework,为什么在本文中: 我们已检查EntityState.是否在Delete方法中分离,然后在Attach中分离,在Update方法中未检查: public virtual void Delete(TEntity entityToDelete) { if (context.Entry(entityToDelete).State == EntityState.Detached) { dbSet.Attach(entityToDele

为什么在本文中: 我们已检查EntityState.是否在Delete方法中分离,然后在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;
    }

这两种方法不同的原因是,在本教程中有另一种方法调用delete:

    public virtual void Delete(object id)
    {
        TEntity entityToDelete = dbSet.Find(id);
        Delete(entityToDelete);
    }
因此,如果Delete(TEntity entityToDelete)是从客户端事件调用的,它应该像在Update方法中一样首先被附加,但是如果它是作为服务器端处理的一部分从Delete(object id)调用的,它将已经被附加


<> P>安全:<强>最好在更改之前检查它是否被连接:具体地考虑:在将来,修订可能会发布一个同样可以调用更新方法的服务器方法。

< P> > <强>应该>,不是<强>必须< /强>。您可以执行更新和删除,而无需附加。但是,这会导致代码变得不安全,更容易出错


如果您试图删除或更新分离的实体,您将遇到异常,如果您没有计划处理它,您的应用程序将崩溃并停止工作…

这个问题有一个很长的答案,但我会给您一个简短的场景。。假设要更新分离对象的ID。框架如何知道需要更新哪些内容?你的回答是正确的,但我认为他在评论中问的是,为什么首先要有一个附加/分离的机制。