public async Task DelayQueryOnFunctionImport()
        {
            this.testClientContext             = this.CreateWrappedContext <InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //Post an Product
            var product = ProductPlus.CreateProductPlus(10001, "10001", "2", 2.0f, 2, true);

            product.SkinColorPlus  = ColorPlus.RedPlus;
            product.UserAccessPlus = AccessLevelPlus.ExecutePlus | AccessLevelPlus.ReadPlus;
            this.testClientContext.AddToProductsPlus(product);
            await this.testClientContext.SaveChangesAsync();

            //Composable FunctionImport, return collection of entitySet
            var getAllProductsFunction = this.testClientContext.GetAllProductsPlus();
            var products = (await getAllProductsFunction.ExecuteAsync()).ToList();

            Assert.True(products.Any());
            Assert.True(getAllProductsFunction.RequestUri.OriginalString.EndsWith("/GetAllProducts()"));
            double unitPrice = products.First().UnitPricePlus;

            //GetEnumerator
            var discountAction = getAllProductsFunction.DiscountPlus(50);

            foreach (var p in await discountAction.ExecuteAsync())
            {
                Assert.Equal(unitPrice * 50 / 100, p.UnitPricePlus);
                break;
            }
            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/GetAllProducts()/Microsoft.Test.OData.Services.ODataWCFService.Discount"));

            //Filter after Bound FunctionImport
            var filterAllProducts = getAllProductsFunction.Where(p => p.SkinColorPlus == ColorPlus.RedPlus) as DataServiceQuery <ProductPlus>;

            foreach (var p in await filterAllProducts.ExecuteAsync())
            {
                Assert.Equal(ColorPlus.RedPlus, p.SkinColorPlus);
            }
            Assert.True(filterAllProducts.RequestUri.OriginalString.EndsWith("/GetAllProducts()?$filter=SkinColor eq Microsoft.Test.OData.Services.ODataWCFService.Color'Red'"));

            //FunctionImport, return collection of primitivetype
            var getBossEmailsFunction = this.testClientContext.GetBossEmailsPlus(0, 10);
            var emails = await getBossEmailsFunction.ExecuteAsync();

            Assert.True(getBossEmailsFunction.RequestUri.OriginalString.EndsWith("/GetBossEmails(start=0,count=10)"));

            //FunctionImport, return Collection of primitivetype with enum parameter
            //Fail now
            var productsNameQuery = this.testClientContext.GetProductsByAccessLevelPlus(AccessLevelPlus.ReadPlus | AccessLevelPlus.ExecutePlus);
            var productsName      = await productsNameQuery.ExecuteAsync();

            Assert.True(Uri.UnescapeDataString(productsNameQuery.RequestUri.OriginalString).EndsWith("/GetProductsByAccessLevel(accessLevel=Microsoft.Test.OData.Services.ODataWCFService.AccessLevel'Read,Execute')"));
            Assert.True(productsName.Any());
        }
        public void FunctionAndFunctionImportInFilterAndOrderBy()
        {
            this.testClientContext             = this.CreateWrappedContext <InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //FunctionImport in query option
            var queryAccount = this.testClientContext.AccountsPlus.Where(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result > 1) as DataServiceQuery <AccountPlus>;

            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$filter=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5) gt 1.0"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.Where(a => 1 != a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery <AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$filter=1.0 ne MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5)"));
            //queryAccount.Execute();

            var queryPeople = this.testClientContext.PeoplePlus.Where(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus != "name") as DataServiceQuery <PersonPlus>;

            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$filter=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName ne 'name'"));
            //queryPeople.Execute();

            queryPeople = this.testClientContext.PeoplePlus.Where(p => "name" != p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery <PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$filter='name' ne $it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName"));
            //queryPeople.Execute();

            var queryProducts = this.testClientContext.ProductsPlus.Where(p => p.GetProductDetailsPlus(2).Count() > 1) as DataServiceQuery <ProductPlus>;

            Assert.True(queryProducts.RequestUri.OriginalString.EndsWith("/Products?$filter=$it/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails(count=2)/$count gt 1"));
            //queryProducts.Execute();

            queryProducts = this.testClientContext.ProductsPlus.Where(p => 1 <= p.GetProductDetailsPlus(2).Count()) as DataServiceQuery <ProductPlus>;
            Assert.True(queryProducts.RequestUri.OriginalString.EndsWith("/Products?$filter=1 le $it/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails(count=2)/$count"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.OrderBy(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery <AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$orderby=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5)"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.OrderByDescending(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery <AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$orderby=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5) desc"));
            //queryAccount.Execute();

            queryPeople = this.testClientContext.PeoplePlus.OrderBy(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery <PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$orderby=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName"));
            //queryPeople.Execute();

            queryPeople = this.testClientContext.PeoplePlus.OrderByDescending(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery <PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$orderby=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName desc"));
            //queryPeople.Execute();
        }
        public async Task DelayQueryOnActionImport45()
        {
            this.testClientContext             = this.CreateWrappedContext <InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            var    product       = (await(this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery <ProductPlus>).ExecuteAsync()).Single();
            double originalPrice = product.UnitPricePlus;

            //ActionImport return void
            var discountAction = this.testClientContext.DiscountPlus(50);
            await discountAction.ExecuteAsync();

            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/Discount"));

            product = (await(this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery <ProductPlus>).ExecuteAsync()).Single();
            Assert.Equal(originalPrice * 50 / 100, product.UnitPricePlus);
        }
        public void DelayQueryOnActionImport35()
        {
            this.testClientContext             = this.CreateWrappedContext <InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            var    queryProduct  = this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery <ProductPlus>;
            var    ar            = queryProduct.BeginExecute(null, null).EnqueueWait(this);
            var    product       = queryProduct.EndExecute(ar).Single();
            double originalPrice = product.UnitPricePlus;

            //ActionImport return void
            var discountAction = this.testClientContext.DiscountPlus(50);
            var ar2            = discountAction.BeginExecute(null, null).EnqueueWait(this);

            discountAction.EndExecute(ar2);
            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/Discount"));

            var ar3 = queryProduct.BeginExecute(null, null).EnqueueWait(this);

            product = queryProduct.EndExecute(ar3).Single();
            Assert.Equal(originalPrice * 50 / 100, product.UnitPricePlus);
        }
        public async Task DelayQueryOnDerivedSingleton()
        {
            this.testClientContext             = this.CreateWrappedContext <InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //Query Singleton
            var publicCompanyQuery = this.testClientContext.PublicCompanyPlus;
            var publicCompany      = await publicCompanyQuery.GetValueAsync();

            Assert.True(publicCompanyQuery.RequestUri.OriginalString.EndsWith("/PublicCompany"));
            Assert.NotNull(publicCompany);

            //Query Property On Derived Singleton
            var stockExchangeQuery = this.testClientContext.PublicCompanyPlus.Select(p => (p as PublicCompanyPlus).StockExchangePlus);
            var stockExchange      = await stockExchangeQuery.GetValueAsync();

            Assert.True(stockExchangeQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/StockExchange"));
            Assert.NotNull(stockExchange);

            //Query Navigation Property on Dervied Singleton
            var assetsQuery = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().AssetsPlus;
            var assets      = await assetsQuery.ExecuteAsync();

            Assert.True(assetsQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/Assets"));
            Assert.NotNull(assets);

            //Filter Navigation Property on Dervied Singleton
            assetsQuery = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().AssetsPlus.Where(a => a.NamePlus != "Temp") as DataServiceQuery <AssetPlus>;
            assets      = await assetsQuery.ExecuteAsync();

            Assert.True(assetsQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/Assets?$filter=Name ne 'Temp'"));
            Assert.NotNull(assets);

            //Projection
            var publicCompany2Query = this.testClientContext.PublicCompanyPlus.Select(
                p =>
                new PublicCompanyPlus()
            {
                AddressPlus       = p.AddressPlus,
                LabourUnionPlus   = (p as PublicCompanyPlus).LabourUnionPlus,
                StockExchangePlus = (p as PublicCompanyPlus).StockExchangePlus
            });
            var publicCompany2 = await publicCompany2Query.GetValueAsync();

            Assert.True(publicCompany2Query.RequestUri.OriginalString.EndsWith(
                            "/PublicCompany?$expand=Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion&$select=Address,Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/StockExchange"));
            Assert.NotNull(publicCompany2.AddressPlus);
            Assert.NotNull(publicCompany2.LabourUnionPlus);
            Assert.NotNull(publicCompany2.StockExchangePlus);

            //Expand Navigation Property on Derived Singleton
            var publicCompany3Query = this.testClientContext.PublicCompanyPlus.Expand(p => (p as PublicCompanyPlus).LabourUnionPlus);

            publicCompany = await publicCompany3Query.GetValueAsync();

            Assert.True(publicCompany3Query.RequestUri.OriginalString.EndsWith("/PublicCompany?$expand=Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion"));
            Assert.NotNull(((PublicCompanyPlus)publicCompany).LabourUnionPlus);

            //Action Bound on Navigation Property on Derived Singleton, return void
            DataServiceActionQuery changeLabourUnionAction = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().LabourUnionPlus.ChangeLabourUnionNamePlus("changedLabourUnion");
            await changeLabourUnionAction.ExecuteAsync();

            Assert.True(changeLabourUnionAction.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion/Microsoft.Test.OData.Services.ODataWCFService.ChangeLabourUnionName"));
            var labourUnion = (await this.testClientContext.PublicCompanyPlus.Select(p => (p as PublicCompanyPlus).LabourUnionPlus).GetValueAsync()).NamePlus;

            Assert.Equal("changedLabourUnion", labourUnion);
        }
        public void FunctionAndFunctionImportInFilterAndOrderBy()
        {
            this.testClientContext = this.CreateWrappedContext<InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //FunctionImport in query option
            var queryAccount = this.testClientContext.AccountsPlus.Where(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result > 1) as DataServiceQuery<AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$filter=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5) gt 1.0"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.Where(a => 1 != a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery<AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$filter=1.0 ne MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5)"));
            //queryAccount.Execute();

            var queryPeople = this.testClientContext.PeoplePlus.Where(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus != "name") as DataServiceQuery<PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$filter=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName ne 'name'"));
            //queryPeople.Execute();

            queryPeople = this.testClientContext.PeoplePlus.Where(p => "name" != p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery<PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$filter='name' ne $it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName"));
            //queryPeople.Execute();

            var queryProducts = this.testClientContext.ProductsPlus.Where(p => p.GetProductDetailsPlus(2).Count() > 1) as DataServiceQuery<ProductPlus>;
            Assert.True(queryProducts.RequestUri.OriginalString.EndsWith("/Products?$filter=$it/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails(count=2)/$count gt 1"));
            //queryProducts.Execute();

            queryProducts = this.testClientContext.ProductsPlus.Where(p => 1 <= p.GetProductDetailsPlus(2).Count()) as DataServiceQuery<ProductPlus>;
            Assert.True(queryProducts.RequestUri.OriginalString.EndsWith("/Products?$filter=1 le $it/Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails(count=2)/$count"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.OrderBy(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery<AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$orderby=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5)"));
            //queryAccount.Execute();

            queryAccount = this.testClientContext.AccountsPlus.OrderByDescending(a => a.MyGiftCardPlus.GetActualAmountPlus(0.5).GetValueAsync().Result) as DataServiceQuery<AccountPlus>;
            Assert.True(queryAccount.RequestUri.OriginalString.EndsWith("/Accounts?$orderby=MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.5) desc"));
            //queryAccount.Execute();

            queryPeople = this.testClientContext.PeoplePlus.OrderBy(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery<PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$orderby=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName"));
            //queryPeople.Execute();

            queryPeople = this.testClientContext.PeoplePlus.OrderByDescending(p => p.GetHomeAddressPlus().GetValueAsync().Result.FamilyNamePlus) as DataServiceQuery<PersonPlus>;
            Assert.True(queryPeople.RequestUri.OriginalString.EndsWith("/People?$orderby=$it/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress()/FamilyName desc"));
            //queryPeople.Execute();
        }
        public async Task DelayQueryOnActionImport45()
        {
            this.testClientContext = this.CreateWrappedContext<InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            var product = (await (this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery<ProductPlus>).ExecuteAsync()).Single();
            double originalPrice = product.UnitPricePlus;

            //ActionImport return void
            var discountAction = this.testClientContext.DiscountPlus(50);
            await discountAction.ExecuteAsync();
            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/Discount"));

            product = (await (this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery<ProductPlus>).ExecuteAsync()).Single();
            Assert.Equal(originalPrice * 50 / 100, product.UnitPricePlus);
        }
        public void DelayQueryOnActionImport35()
        {
            this.testClientContext = this.CreateWrappedContext<InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            var queryProduct = this.testClientContext.ProductsPlus.Take(1) as DataServiceQuery<ProductPlus>;
            var ar = queryProduct.BeginExecute(null, null).EnqueueWait(this);
            var product = queryProduct.EndExecute(ar).Single();
            double originalPrice = product.UnitPricePlus;

            //ActionImport return void
            var discountAction = this.testClientContext.DiscountPlus(50);
            var ar2 = discountAction.BeginExecute(null, null).EnqueueWait(this);
            discountAction.EndExecute(ar2);
            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/Discount"));

            var ar3 = queryProduct.BeginExecute(null, null).EnqueueWait(this);
            product = queryProduct.EndExecute(ar3).Single();
            Assert.Equal(originalPrice * 50 / 100, product.UnitPricePlus);
        }
        public async Task DelayQueryOnFunctionImport()
        {
            this.testClientContext = this.CreateWrappedContext<InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //Post an Product
            var product = ProductPlus.CreateProductPlus(10001, "10001", "2", 2.0f, 2, true);
            product.SkinColorPlus = ColorPlus.RedPlus;
            product.UserAccessPlus = AccessLevelPlus.ExecutePlus | AccessLevelPlus.ReadPlus;
            this.testClientContext.AddToProductsPlus(product);
            await this.testClientContext.SaveChangesAsync();

            //Composable FunctionImport, return collection of entitySet
            var getAllProductsFunction = this.testClientContext.GetAllProductsPlus();
            var products = (await getAllProductsFunction.ExecuteAsync()).ToList();
            Assert.True(products.Any());
            Assert.True(getAllProductsFunction.RequestUri.OriginalString.EndsWith("/GetAllProducts()"));
            double unitPrice = products.First().UnitPricePlus;

            //GetEnumerator
            var discountAction = getAllProductsFunction.DiscountPlus(50);
            foreach (var p in await discountAction.ExecuteAsync())
            {
                Assert.Equal(unitPrice * 50 / 100, p.UnitPricePlus);
                break;
            }
            Assert.True(discountAction.RequestUri.OriginalString.EndsWith("/GetAllProducts()/Microsoft.Test.OData.Services.ODataWCFService.Discount"));

            //Filter after Bound FunctionImport
            var filterAllProducts = getAllProductsFunction.Where(p => p.SkinColorPlus == ColorPlus.RedPlus) as DataServiceQuery<ProductPlus>;
            foreach (var p in await filterAllProducts.ExecuteAsync())
            {
                Assert.Equal(ColorPlus.RedPlus, p.SkinColorPlus);
            }
            Assert.True(filterAllProducts.RequestUri.OriginalString.EndsWith("/GetAllProducts()?$filter=SkinColor eq Microsoft.Test.OData.Services.ODataWCFService.Color'Red'"));

            //FunctionImport, return collection of primitivetype
            var getBossEmailsFunction = this.testClientContext.GetBossEmailsPlus(0, 10);
            var emails = await getBossEmailsFunction.ExecuteAsync();
            Assert.True(getBossEmailsFunction.RequestUri.OriginalString.EndsWith("/GetBossEmails(start=0,count=10)"));

            //FunctionImport, return Collection of primitivetype with enum parameter
            //Fail now
            var productsNameQuery = this.testClientContext.GetProductsByAccessLevelPlus(AccessLevelPlus.ReadPlus | AccessLevelPlus.ExecutePlus);
            var productsName = await productsNameQuery.ExecuteAsync();

            Assert.True(Uri.UnescapeDataString(productsNameQuery.RequestUri.OriginalString).EndsWith("/GetProductsByAccessLevel(accessLevel=Microsoft.Test.OData.Services.ODataWCFService.AccessLevel'Read,Execute')"));
            Assert.True(productsName.Any());
        }
Exemplo n.º 10
0
        public async Task DelayQueryOnDerivedSingleton()
        {
            this.testClientContext = this.CreateWrappedContext<InMemoryEntitiesPlus>().Context;
            this.testClientContext.MergeOption = MergeOption.OverwriteChanges;

            //Query Singleton
            var publicCompanyQuery = this.testClientContext.PublicCompanyPlus;
            var publicCompany = await publicCompanyQuery.GetValueAsync();
            Assert.True(publicCompanyQuery.RequestUri.OriginalString.EndsWith("/PublicCompany"));
            Assert.NotNull(publicCompany);

            //Query Property On Derived Singleton
            var stockExchangeQuery = this.testClientContext.PublicCompanyPlus.Select(p => (p as PublicCompanyPlus).StockExchangePlus);
            var stockExchange = await stockExchangeQuery.GetValueAsync();
            Assert.True(stockExchangeQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/StockExchange"));
            Assert.NotNull(stockExchange);

            //Query Navigation Property on Dervied Singleton
            var assetsQuery = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().AssetsPlus;
            var assets = await assetsQuery.ExecuteAsync();
            Assert.True(assetsQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/Assets"));
            Assert.NotNull(assets);

            //Filter Navigation Property on Dervied Singleton
            assetsQuery = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().AssetsPlus.Where(a => a.NamePlus != "Temp") as DataServiceQuery<AssetPlus>;
            assets = await assetsQuery.ExecuteAsync();
            Assert.True(assetsQuery.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/Assets?$filter=Name ne 'Temp'"));
            Assert.NotNull(assets);

            //Projection
            var publicCompany2Query = this.testClientContext.PublicCompanyPlus.Select(
                p =>
                    new PublicCompanyPlus()
                    {
                        AddressPlus = p.AddressPlus,
                        LabourUnionPlus = (p as PublicCompanyPlus).LabourUnionPlus,
                        StockExchangePlus = (p as PublicCompanyPlus).StockExchangePlus
                    });
            var publicCompany2 = await publicCompany2Query.GetValueAsync();
            Assert.True(publicCompany2Query.RequestUri.OriginalString.EndsWith(
                "/PublicCompany?$expand=Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion&$select=Address,Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/StockExchange"));
            Assert.NotNull(publicCompany2.AddressPlus);
            Assert.NotNull(publicCompany2.LabourUnionPlus);
            Assert.NotNull(publicCompany2.StockExchangePlus);

            //Expand Navigation Property on Derived Singleton
            var publicCompany3Query = this.testClientContext.PublicCompanyPlus.Expand(p => (p as PublicCompanyPlus).LabourUnionPlus);
            publicCompany = await publicCompany3Query.GetValueAsync();
            Assert.True(publicCompany3Query.RequestUri.OriginalString.EndsWith("/PublicCompany?$expand=Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion"));
            Assert.NotNull(((PublicCompanyPlus)publicCompany).LabourUnionPlus);

            //Action Bound on Navigation Property on Derived Singleton, return void
            DataServiceActionQuery changeLabourUnionAction = this.testClientContext.PublicCompanyPlus.CastToPublicCompanyPlus().LabourUnionPlus.ChangeLabourUnionNamePlus("changedLabourUnion");
            await changeLabourUnionAction.ExecuteAsync();
            Assert.True(changeLabourUnionAction.RequestUri.OriginalString.EndsWith("/PublicCompany/Microsoft.Test.OData.Services.ODataWCFService.PublicCompany/LabourUnion/Microsoft.Test.OData.Services.ODataWCFService.ChangeLabourUnionName"));
            var labourUnion = (await this.testClientContext.PublicCompanyPlus.Select(p => (p as PublicCompanyPlus).LabourUnionPlus).GetValueAsync()).NamePlus;
            Assert.Equal("changedLabourUnion", labourUnion);
        }