protected void QueryNavProperty(Func <IEdmEntityType, List <string> > getNavPropsLambda) { ForEachResourceType( (resourceType, resourceContainer, workspace) => { CreateContext(resourceType, workspace); AstoriaTestLog.WriteLine("Querying entityset {0}", resourceContainer.Name); IEdmEntityType entityType = DataServiceMetadata.EntityTypes.FirstOrDefault(eType => eType.Name == resourceType.Name); KeyExpression keyExp = workspace.GetRandomExistingKey(resourceContainer); if (keyExp != null && (!(resourceContainer is ServiceOperation))) { List <KVP> keyExpValues = WebDataCtxWrapper.ConvertKeyExpression(keyExp); foreach (string collNavProperty in getNavPropsLambda(entityType)) { AstoriaTestLog.WriteLine("Querying Properties {0}", collNavProperty); try { DataServiceQuery queryWithExpand = ((DataServiceQuery)CurrentContext.CreateQueryOfT(resourceContainer.Name, resourceType.ClientClrType)).Where(keyExpValues); //.SelectNavigationProperty(collNavProperty) as DataServiceQuery; IEnumerator enumerateQueryResults = ((IQueryable)queryWithExpand).GetEnumerator(); object entity = null; if (enumerateQueryResults.MoveNext()) { entity = enumerateQueryResults.Current; } while (enumerateQueryResults.MoveNext()) { ; } Uri entityUri = null; CurrentContext.UnderlyingContext.TryGetUri(entity, out entityUri); CurrentContext.Detach(entity); entityUri = new Uri(entityUri.OriginalString + "/" + collNavProperty); var qoREsponse = CurrentContext.ExecuteOfT(GetResourceType(collNavProperty, resourceType).ClientClrType, entityUri); IEnumerator enumerator = qoREsponse.GetEnumerator(); while (enumerator.MoveNext()) { ; } if (ChainedFunction != null) { ChainedFunction(); } } catch (System.Reflection.TargetInvocationException tiException) { if (!tiException.ToString().Contains("Sequence Contains")) { throw tiException; } } } } }, false); }
private void VerifyLoadProperty(object entity, string propertyName, WebDataCtxWrapper Context) { Uri entityUri = null; if (Context.TryGetUri(entity, out entityUri)) { Uri navigationPropertyURI = new Uri(String.Format("{0}/{1}", entityUri.OriginalString, propertyName));; Type navPropType = entity.GetType().GetProperty(propertyName).PropertyType; if (navPropType.IsGenericType) { navPropType = navPropType.GetGenericArguments()[0]; } WebDataCtxWrapper baselineCOntext = new WebDataCtxWrapper(Context.BaseUri); baselineCOntext.Credentials = CredentialCache.DefaultCredentials; QueryOperationResponse qoResponse = baselineCOntext.ExecuteOfT(navPropType, navigationPropertyURI) as QueryOperationResponse; IEnumerator enumerator = qoResponse.GetEnumerator(); while (enumerator.MoveNext()) { object baselineEntity = enumerator.Current; Uri navPropEntityURI = null; if (baselineCOntext.TryGetUri(baselineEntity, out navPropEntityURI)) { AstoriaTestLog.IsNotNull(Context.TryGetEntityOfT(navPropType, navPropEntityURI), "Could not find entity in Navigation property "); } } } }
protected object ExecuteURI(ResourceType resourceType, string requestURI, WebDataCtxWrapper context) { IQueryable result = context.ExecuteOfT(resourceType.ClientClrType, new Uri(requestURI, UriKind.RelativeOrAbsolute)).AsQueryable(); object entity = null; IEnumerator requestEnumerator = result.GetEnumerator(); if (requestEnumerator.MoveNext()) { entity = requestEnumerator.Current; } return(entity); }