Asp.net .Attach与.Add-in实体框架6.1有何不同?

Asp.net .Attach与.Add-in实体框架6.1有何不同?,asp.net,entity-framework,Asp.net,Entity Framework,我正在从这里使用存储库 存储库中使用了以下两种方法: public virtual void Insert(TEntity entity) { ((IObjectState) entity).ObjectState = ObjectState.Added; _dbSet.Attach(entity); _context.SyncObjectState(entity); } public virtual void

我正在从这里使用存储库

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

    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之间的区别吗?它是部分特定于您正在使用的开源项目的代码,而不是直接用于EF,所以为什么不检查源代码呢?使用开源不是一个好处吗

简言之:

  • InsertGraph
    将获取您的实体及其所有关系并将它们添加到上下文中-图形中的所有实体将作为新实体插入到数据库中
  • Insert
    将只插入您正在传递的实体,并且希望不会插入所有关系(如果您没有在其他地方操纵它们的状态)。
    SyncObjectState
    只是将特定于框架的状态表示转换为EF状态表示
这是部分特定于您正在使用的开源项目的代码,而不是直接用于EF,那么您为什么不检查源代码呢?使用开源不是一个好处吗

简言之:

  • InsertGraph
    将获取您的实体及其所有关系并将它们添加到上下文中-图形中的所有实体将作为新实体插入到数据库中
  • Insert
    将只插入您正在传递的实体,并且希望不会插入所有关系(如果您没有在其他地方操纵它们的状态)。
    SyncObjectState
    只是将特定于框架的状态表示转换为EF状态表示
这是部分特定于您正在使用的开源项目的代码,而不是直接用于EF,那么您为什么不检查源代码呢?使用开源不是一个好处吗

简言之:

  • InsertGraph
    将获取您的实体及其所有关系并将它们添加到上下文中-图形中的所有实体将作为新实体插入到数据库中
  • Insert
    将只插入您正在传递的实体,并且希望不会插入所有关系(如果您没有在其他地方操纵它们的状态)。
    SyncObjectState
    只是将特定于框架的状态表示转换为EF状态表示
这是部分特定于您正在使用的开源项目的代码,而不是直接用于EF,那么您为什么不检查源代码呢?使用开源不是一个好处吗

简言之:

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