Actually you are talking about AddObject
method of ObjectSet<TEntity>
class which was used by old ObjectContext
. But since Entity Framework 4 we have DbContext
class (which is a wrapper over old ObjectContext
). This new class uses DbSet<TEntity>
instead of old ObjectSet<TEntity>
. New set class has method Add
.
So, back to differences. Old implementation invoked AddObject
method of ObjectContext
:
public void AddObject(TEntity entity)
{
Context.AddObject(FullyQualifiedEntitySetName, entity);
}
New implementation does same thing (see action parameter):
public virtual void Add(object entity)
{
ActOnSet(() => ((InternalSet<TEntity>) this).InternalContext.ObjectContext.AddObject(((InternalSet<TEntity>) this).EntitySetName, entity),
EntityState.Added, entity, "Add");
}
As you can see same ObjectContext.AddObject
method is called internally. What was changed - previously we just added entity to context, but now if there is state entry exists in ObjectStateManager, then we just changing state of entry to Added
:
if (InternalContext.ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out entry))
{
entry.ChangeState(newState); // just change state
}
else
{
action(); // invoke ObjectContext.AddObject
}
Main goal of new API is making DbContext
easier to use.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…