/// <summary> /// Asynchronously submits changes made using an API context. /// </summary> /// <param name="context"> /// An API context. /// </param> /// <param name="changeSet"> /// A change set, or <c>null</c> to submit existing pending changes. /// </param> /// <param name="cancellationToken"> /// An optional cancellation token. /// </param> /// <returns> /// A task that represents the asynchronous /// operation whose result is a submit result. /// </returns> public static async Task <SubmitResult> SubmitAsync( this ApiContext context, ChangeSet changeSet = null, CancellationToken cancellationToken = default(CancellationToken)) { Ensure.NotNull(context, "context"); var submitContext = new SubmitContext(context, changeSet); var model = await context.GetModelAsync(cancellationToken); submitContext.Model = model; return(await DefaultSubmitHandler.SubmitAsync(submitContext, cancellationToken)); }
/// <summary> /// Asynchronously queries for data using an API context. /// </summary> /// <param name="context"> /// An API context. /// </param> /// <param name="request"> /// A query request. /// </param> /// <param name="cancellationToken"> /// An optional cancellation token. /// </param> /// <returns> /// A task that represents the asynchronous /// operation whose result is a query result. /// </returns> public static async Task <QueryResult> QueryAsync( this ApiContext context, QueryRequest request, CancellationToken cancellationToken = default(CancellationToken)) { Ensure.NotNull(context, "context"); Ensure.NotNull(request, "request"); var queryContext = new QueryContext(context, request); var model = await context.GetModelAsync(cancellationToken); queryContext.Model = model; return(await DefaultQueryHandler.QueryAsync(queryContext, cancellationToken)); }
/// <summary> /// Tries to get the relevant type of an entity /// set, singleton, or composable function import. /// </summary> /// <param name="context"> /// An API context. /// </param> /// <param name="name"> /// The name of an entity set, singleton or composable function import. /// </param> /// <param name="relevantType"> /// When this method returns, provides the /// relevant type of the queryable source. /// </param> /// <returns> /// <c>true</c> if the relevant type was /// provided; otherwise, <c>false</c>. /// </returns> public bool TryGetRelevantType( ApiContext context, string name, out Type relevantType) { // Cannot await as cannot make method async var model = context.GetModelAsync().Result; var element = model.EntityContainer.Elements.Where(e => e.Name == name).FirstOrDefault(); if (element != null) { IEdmType entityType = null; var entitySet = element as EdmEntitySet; if (entitySet != null) { var entitySetType = entitySet.Type as EdmCollectionType; entityType = entitySetType.ElementType.Definition; } else { var singleton = element as EdmSingleton; if (singleton != null) { entityType = singleton.Type; } } if (entityType != null) { ClrTypeAnnotation annotation = model.GetAnnotationValue<ClrTypeAnnotation>(entityType); if (annotation != null) { relevantType = annotation.ClrType; return true; } } } return InnerMapper.TryGetRelevantType(context, name, out relevantType); }