我正在使用此处的存储库
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
之间的区别答案 0 :(得分:3)
这是部分特定于您正在使用的开源项目的代码 - 不是直接EF,所以为什么不检查源代码?这不是使用开源的好处吗?
简而言之:
InsertGraph
将获取您的实体及其所有关系,并将它们添加到上下文中 - 图中的所有实体都将作为新实体插入数据库。Insert
只会插入您传递的实体,并且希望不会插入所有关系(如果您没有在其他地方操纵其状态)。 SyncObjectState
只是将框架特定的状态表示转换为EF状态表示。