public int Store2(Transaction trans, object obj, IUpdateDepth updateDepth, bool checkJustSet ) { if (obj == null || (obj is ITransientClass)) { return 0; } ObjectAnalyzer analyzer = new ObjectAnalyzer(this, obj); analyzer.Analyze(trans); if (analyzer.NotStorable()) { return 0; } ObjectReference @ref = analyzer.ObjectReference(); if (@ref == null) { ClassMetadata classMetadata = analyzer.ClassMetadata(); if (!ObjectCanNew(trans, classMetadata, obj)) { return 0; } @ref = new ObjectReference(); @ref.Store(trans, classMetadata, obj); trans.AddNewReference(@ref); if (obj is IDb4oTypeImpl) { ((IDb4oTypeImpl)obj).SetTrans(trans); } if (ConfigImpl.MessageLevel() > Const4.State) { Message(string.Empty + @ref.GetID() + " new " + @ref.ClassMetadata().GetName()); } FlagAsHandled(@ref); StillToSet(trans, @ref, updateDepth); } else { if (@ref.IsFlaggedAsHandled(_topLevelCallId)) { AssertNotInCallback(); } if (CanUpdate()) { if (checkJustSet) { if (([email protected]()) && HandledInCurrentTopLevelCall(@ref)) { return @ref.GetID(); } } if (updateDepth.SufficientDepth()) { FlagAsHandled(@ref); @ref.WriteUpdate(trans, updateDepth); } } } ProcessPendingClassUpdates(); return @ref.GetID(); }