/// <summary> /// Adds an entity in a 'pending insert' state to this table. The added entity will not be observed /// in query results from this table until after SubmitChanges() has been called. Any untracked /// objects referenced directly or transitively by the entity will also be inserted. /// </summary> /// <param name="entity"></param> public void InsertOnSubmit(TEntity entity) { if (entity == null) { throw Error.ArgumentNull("entity"); } CheckReadOnly(); context.CheckNotInSubmitChanges(); context.VerifyTrackingEnabled(); MetaType type = this.metaTable.RowType.GetInheritanceType(entity.GetType()); if (type == null) { throw Error.InheritanceTypeNotRegistered(entity.GetType()); } if (!IsTrackableType(type)) { throw Error.TypeCouldNotBeAdded(type.Type); } TrackedObject tracked = this.context.Services.ChangeTracker.GetTrackedObject(entity); if (tracked == null) { tracked = this.context.Services.ChangeTracker.Track(entity); tracked.ConvertToNew(); } else if (tracked.IsWeaklyTracked) { tracked.ConvertToNew(); } else if (tracked.IsDeleted) { tracked.ConvertToPossiblyModified(); } else if (tracked.IsRemoved) { tracked.ConvertToNew(); } else if (!tracked.IsNew) { throw Error.CantAddAlreadyExistingItem(); } }