/// <summary> /// Visits an entry item. /// </summary> /// <param name="entry">The entry to visit.</param> protected virtual void VisitEntry(ODataResource entry) { if (entry.MediaResource != null) { this.Visit(entry.MediaResource); } if (entry.Actions != null) { foreach (var action in entry.Actions) { this.VisitODataOperation(action); } } if (entry.Functions != null) { foreach (var function in entry.Functions) { this.VisitODataOperation(function); } } entry.ProcessPropertiesPreservingPayloadOrder( property => this.VisitProperty(property), navigationLink => this.VisitNavigationLink(navigationLink)); }
/// <summary> /// Visits an entry item. /// </summary> /// <param name="entry">The entry to visit.</param> protected override ODataPayloadElement VisitEntry(ODataResource entry) { ExceptionUtilities.CheckArgumentNotNull(entry, "entry"); EntityInstance entity = new EntityInstance(entry.TypeName, false); if (this.payloadContainsIdentityMetadata) { entity.Id = entry.Id == null ? null : entry.Id.OriginalString; if (entry.ReadLink != null) { entity.WithSelfLink(entry.ReadLink.OriginalString); } if (entry.EditLink != null) { entity.WithEditLink(entry.EditLink.OriginalString); } } if (this.payloadContainsEtagPropertiesForType(entry.TypeName)) { entity.ETag = entry.ETag; } ODataStreamReferenceValue mediaResource = entry.MediaResource; if (mediaResource != null) { entity = entity.AsMediaLinkEntry(); NamedStreamInstance namedStreamInstance = (NamedStreamInstance)this.Visit(mediaResource); entity.StreamETag = namedStreamInstance.ETag; entity.StreamSourceLink = namedStreamInstance.SourceLink; entity.StreamEditLink = namedStreamInstance.EditLink; entity.StreamContentType = namedStreamInstance.SourceLinkContentType ?? namedStreamInstance.EditLinkContentType; foreach (var namedStreamAtomLinkMetadataAnnotation in namedStreamInstance.Annotations.OfType <NamedStreamAtomLinkMetadataAnnotation>()) { entity.AddAnnotation(namedStreamAtomLinkMetadataAnnotation); } } // convert properties and navigation links entry.ProcessPropertiesPreservingPayloadOrder( property => entity.Add((PropertyInstance)this.Visit(property)), navigationLink => entity.Add((PropertyInstance)this.Visit(navigationLink))); var actions = entry.Actions; if (actions != null) { foreach (var operation in actions) { var serviceOperationDescriptor = this.Visit(operation) as ServiceOperationDescriptor; entity.Add(serviceOperationDescriptor); } } var functions = entry.Functions; if (functions != null) { foreach (var operation in functions) { var serviceOperationDescriptor = this.Visit(operation) as ServiceOperationDescriptor; entity.Add(serviceOperationDescriptor); } } this.ConvertSerializationTypeNameAnnotation(entry, entity); return(entity); }