private void Marshall(Transaction trans, ObjectReference @ref, IWriteBuffer buffer
                              , bool isNew)
        {
            if (!trans.SupportsVirtualFields())
            {
                MarshallIgnore(buffer);
                return;
            }
            ObjectContainerBase stream   = trans.Container();
            HandlerRegistry     handlers = stream._handlers;
            bool migrating = false;

            if (stream._replicationCallState == Const4.New)
            {
                IDb4oReplicationReferenceProvider provider = handlers._replicationReferenceProvider;
                object parentObject = @ref.GetObject();
                IDb4oReplicationReference replicationReference = provider.ReferenceFor(parentObject
                                                                                       );
                if (replicationReference != null)
                {
                    migrating = true;
                    VirtualAttributes va = @ref.ProduceVirtualAttributes();
                    va.i_version  = replicationReference.Version();
                    va.i_uuid     = replicationReference.LongPart();
                    va.i_database = replicationReference.SignaturePart();
                }
            }
            if (@ref.VirtualAttributes() == null)
            {
                @ref.ProduceVirtualAttributes();
                migrating = false;
            }
            Marshall(trans, @ref, buffer, migrating, isNew);
        }
示例#2
0
		public void StoreByNewReplication(IDb4oReplicationReferenceProvider referenceProvider
			, object obj)
		{
			lock (_lock)
			{
				_replicationCallState = Const4.New;
				_handlers._replicationReferenceProvider = referenceProvider;
				try
				{
					Store2(CheckTransaction(), obj, UpdateDepthProvider().ForDepth(1), false);
				}
				finally
				{
					_replicationCallState = Const4.None;
					_handlers._replicationReferenceProvider = null;
				}
			}
		}