.Attach与实体框架6.1中的.Add不同?

时间:2014-04-09 09:14:15

标签: asp.net entity-framework

我正在使用此处的存储库

genericunitofworkandrepositories

存储库中使用了以下两种方法:

    public virtual void Insert(TEntity entity)
    {
        ((IObjectState) entity).ObjectState = ObjectState.Added;
        _dbSet.Attach(entity);
        _context.SyncObjectState(entity);
    }

    public virtual void InsertGraph(TEntity entity)
    {
        _dbSet.Add(entity);
    }

有人可以解释Attach和SyncObjectState与.Add

之间的区别

1 个答案:

答案 0 :(得分:3)

这是部分特定于您正在使用的开源项目的代码 - 不是直接EF,所以为什么不检查源代码?这不是使用开源的好处吗?

简而言之:

  • InsertGraph将获取您的实体及其所有关系,并将它们添加到上下文中 - 图中的所有实体都将作为新实体插入数据库。
  • Insert只会插入您传递的实体,并且希望不会插入所有关系(如果您没有在其他地方操纵其状态)。 SyncObjectState只是将框架特定的状态表示转换为EF状态表示。