private async Task SerializeBuffered(OeEntryFactory entryFactory, Db.OeEntityAsyncEnumerator asyncEnumerator, Stream stream) { var values = new List <Object>(); while (await asyncEnumerator.MoveNextAsync().ConfigureAwait(false)) { values.Add(asyncEnumerator.Current); } var resourceSet = new ODataResourceSet(); resourceSet.Count = values.Count; Writer.WriteStart(resourceSet); foreach (Object value in values) { int? dummy; ODataResource entry = CreateEntry(entryFactory, entryFactory.GetValue(value, out dummy)); Writer.WriteStart(entry); foreach (OeEntryFactory navigationLink in entryFactory.NavigationLinks) { WriteNavigationLink(value, navigationLink); } Writer.WriteEnd(); } Writer.WriteEnd(); }
public async Task SerializeAsync(OeEntryFactory entryFactory, Db.OeEntityAsyncEnumerator asyncEnumerator, Stream stream) { if (entryFactory.CountOption.GetValueOrDefault()) { await SerializeBuffered(entryFactory, asyncEnumerator, stream); } else { await SerializeUnbuffered(entryFactory, asyncEnumerator, stream); } }
private async Task SerializeUnbuffered(OeEntryFactory entryFactory, Db.OeEntityAsyncEnumerator asyncEnumerator, Stream stream) { Writer.WriteStart(new ODataResourceSet()); while (await asyncEnumerator.MoveNextAsync().ConfigureAwait(false)) { Object value = asyncEnumerator.Current; int? dummy; ODataResource entry = CreateEntry(entryFactory, entryFactory.GetValue(value, out dummy)); Writer.WriteStart(entry); foreach (OeEntryFactory navigationLink in entryFactory.NavigationLinks) { WriteNavigationLink(value, navigationLink); } Writer.WriteEnd(); } Writer.WriteEnd(); }
public async Task SerializeAsync(OeEntryFactory entryFactory, Db.OeEntityAsyncEnumerator asyncEnumerator, Stream stream, long?count) { ODataResourceSet oDataResourceSet = new ODataResourceSet(); oDataResourceSet.Count = count; Writer.WriteStart(oDataResourceSet); while (await asyncEnumerator.MoveNextAsync().ConfigureAwait(false)) { Object value = asyncEnumerator.Current; ODataResource entry = CreateEntry(entryFactory, entryFactory.GetValue(value)); Writer.WriteStart(entry); foreach (OeEntryFactory navigationLink in entryFactory.NavigationLinks) { WriteNavigationLink(value, navigationLink); } Writer.WriteEnd(); } Writer.WriteEnd(); }
public static async Task SerializeAsync(Uri baseUri, OeParseUriContext parseUriContext, Db.OeEntityAsyncEnumerator asyncEnumerator, Stream stream) { IEdmModel edmModel = parseUriContext.EdmModel; OeEntryFactory entryFactory = parseUriContext.EntryFactory; String contentType = parseUriContext.Headers.ContentType; var settings = new ODataMessageWriterSettings() { BaseUri = baseUri, EnableMessageStreamDisposal = false, ODataUri = parseUriContext.ODataUri, Validations = ValidationKinds.ThrowIfTypeConflictsWithMetadata | ValidationKinds.ThrowOnDuplicatePropertyNames, Version = ODataVersion.V4 }; IODataResponseMessage responseMessage = new OeInMemoryMessage(stream, contentType); using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, settings, edmModel)) { ODataUtils.SetHeadersForPayload(messageWriter, ODataPayloadKind.ResourceSet); ODataWriter writer = messageWriter.CreateODataResourceSetWriter(entryFactory.EntitySet, entryFactory.EntityType); var getWriter = new GetWriter(baseUri, parseUriContext.Headers.MetadataLevel, writer); await getWriter.SerializeAsync(entryFactory, asyncEnumerator, stream); } }