Repository: olingo-odata4 Updated Branches: refs/heads/master b86aa5d97 -> 387ba9c09
[OLINGO-1191] Code Improvements Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/387ba9c0 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/387ba9c0 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/387ba9c0 Branch: refs/heads/master Commit: 387ba9c096cccd69436027b6dadaa4e83b5ea0d5 Parents: b86aa5d Author: ramya vasanth <[email protected]> Authored: Thu Dec 14 10:37:35 2017 +0530 Committer: ramya vasanth <[email protected]> Committed: Thu Dec 14 10:37:35 2017 +0530 ---------------------------------------------------------------------- .../core/serialization/ODataBinderImpl.java | 23 +-- .../olingo/client/core/EntitySetTest.java | 51 +++++++ .../apache/olingo/client/core/EntityTest.java | 51 +++++++ .../olingo/client/core/containmentNav.json | 33 +++++ .../olingo/client/core/containmentNav1.json | 36 +++++ .../olingo/client/core/containmentNav2.json | 33 +++++ .../olingo/client/core/containmentNav3.json | 33 +++++ .../olingo/client/core/containmentNav4.json | 68 +++++++++ .../olingo/client/core/metadata_sample.xml | 139 +++++++++++++++++++ 9 files changed, 458 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java index 7d0b61c..7d35668 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java @@ -496,10 +496,10 @@ public class ODataBinderImpl implements ODataBinder { inlineEntitySet))); } - private EdmEntityType findEntityType( + private EdmType findEntityType( final String entitySetOrSingletonOrType, final EdmEntityContainer container) { - EdmEntityType type = null; + EdmType type = null; final String firstToken = StringUtils.substringBefore(entitySetOrSingletonOrType, "/"); EdmBindingTarget bindingTarget = container.getEntitySet(firstToken); @@ -514,9 +514,14 @@ public class ODataBinderImpl implements ODataBinder { final String[] splitted = entitySetOrSingletonOrType.split("/"); if (splitted.length > 1) { for (int i = 1; i < splitted.length && type != null; i++) { - final EdmNavigationProperty navProp = type.getNavigationProperty(splitted[i]); + final EdmNavigationProperty navProp = ((EdmStructuredType) type).getNavigationProperty(splitted[i]); if (navProp == null) { - type = null; + EdmProperty property = ((EdmStructuredType) type).getStructuralProperty(splitted[i]); + if (property != null) { + type = property.getType(); + } else { + type = null; + } } else { type = navProp.getType(); } @@ -548,17 +553,17 @@ public class ODataBinderImpl implements ODataBinder { for (EdmSchema schema : edm.getSchemas()) { final EdmEntityContainer container = schema.getEntityContainer(); if (container != null) { - final EdmEntityType entityType = findEntityType(contextURL.getEntitySetOrSingletonOrType(), container); + final EdmType structuredType = findEntityType(contextURL.getEntitySetOrSingletonOrType(), container); - if (entityType != null) { + if (structuredType != null) { if (contextURL.getNavOrPropertyPath() == null) { - type = entityType; + type = structuredType; } else { final EdmNavigationProperty navProp = - entityType.getNavigationProperty(contextURL.getNavOrPropertyPath()); + ((EdmStructuredType) structuredType).getNavigationProperty(contextURL.getNavOrPropertyPath()); type = navProp == null - ? entityType + ? structuredType : navProp.getType(); } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java index b968c5f..6ea256b 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java @@ -26,16 +26,39 @@ import java.io.IOException; import java.io.InputStream; import java.net.URI; +import org.apache.olingo.client.api.EdmEnabledODataClient; import org.apache.olingo.client.api.data.ResWrap; import org.apache.olingo.client.api.domain.ClientEntity; import org.apache.olingo.client.api.domain.ClientEntitySet; import org.apache.olingo.client.api.serialization.ODataDeserializerException; import org.apache.olingo.commons.api.data.EntityCollection; +import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.format.ContentType; import org.junit.Test; public class EntitySetTest extends AbstractTest { +private EdmEnabledODataClient getEdmEnabledClient1() { + return new EdmEnabledODataClientImpl(null, null, null) { + + private Edm edm; + + @Override + public Edm getEdm(final String metadataETag) { + return getCachedEdm(); + } + + @Override + public Edm getCachedEdm() { + if (edm == null) { + edm = getReader().readMetadata(getClass().getResourceAsStream("metadata_sample.xml")); + } + return edm; + } + + }; + } + private void read(final ContentType contentType) throws IOException, ODataDeserializerException { final InputStream input = getClass().getResourceAsStream("Customers." + getSuffix(contentType)); final ClientEntitySet entitySet = client.getBinder().getODataEntitySet( @@ -102,4 +125,32 @@ public class EntitySetTest extends AbstractTest { public void jsonRef() throws Exception { ref(ContentType.JSON); } + + @Test + public void testContainmentNav() throws Exception { + final InputStream input = getClass().getResourceAsStream("containmentNav1." + + getSuffix(ContentType.JSON_FULL_METADATA)); + final ClientEntitySet entity = getEdmEnabledClient1().getBinder(). + getODataEntitySet(client.getDeserializer( + ContentType.JSON_FULL_METADATA).toEntitySet(input)); + assertNotNull(entity); + assertEquals("olingo.odata.test1.ETTwoCont", + entity.getEntities().get(0).getTypeName().getFullQualifiedNameAsString()); + assertEquals("olingo.odata.test1.ETTwoCont", + entity.getEntities().get(1).getTypeName().getFullQualifiedNameAsString()); + } + + @Test + public void testContainmentNavOnSingleton() throws Exception { + final InputStream input = getClass().getResourceAsStream("containmentNav4." + + getSuffix(ContentType.JSON_FULL_METADATA)); + final ClientEntitySet entity = getEdmEnabledClient1().getBinder(). + getODataEntitySet(client.getDeserializer( + ContentType.JSON_FULL_METADATA).toEntitySet(input)); + assertNotNull(entity); + assertEquals("olingo.odata.test1.ETCont", + entity.getEntities().get(0).getTypeName().getFullQualifiedNameAsString()); + assertEquals("olingo.odata.test1.ETCont", + entity.getEntities().get(1).getTypeName().getFullQualifiedNameAsString()); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java index d80846b..bc08918 100644 --- a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java +++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java @@ -76,6 +76,27 @@ public class EntityTest extends AbstractTest { }; } + + private EdmEnabledODataClient getEdmEnabledClient1() { + return new EdmEnabledODataClientImpl(null, null, null) { + + private Edm edm; + + @Override + public Edm getEdm(final String metadataETag) { + return getCachedEdm(); + } + + @Override + public Edm getCachedEdm() { + if (edm == null) { + edm = getReader().readMetadata(getClass().getResourceAsStream("metadata_sample.xml")); + } + return edm; + } + + }; + } private void singleton(final ContentType contentType) throws Exception { final InputStream input = getClass().getResourceAsStream("VipCustomer." + getSuffix(contentType)); @@ -404,4 +425,34 @@ public class EntityTest extends AbstractTest { assertTrue(property.isPrimitive()); assertEquals(property.getValueType(), ValueType.PRIMITIVE); } + + @Test + public void testContainmentNav() throws Exception { + final InputStream input = getClass().getResourceAsStream( + "containmentNav." + getSuffix(ContentType.JSON_FULL_METADATA)); + final ClientEntity entity = getEdmEnabledClient1().getBinder().getODataEntity( + client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input)); + assertNotNull(entity); + assertEquals("olingo.odata.test1.ETCont", entity.getTypeName().getFullQualifiedNameAsString()); + } + + @Test + public void testContainmentNavOnComplexType() throws Exception { + final InputStream input = getClass().getResourceAsStream( + "containmentNav2." + getSuffix(ContentType.JSON_FULL_METADATA)); + final ClientEntity entity = getEdmEnabledClient1().getBinder().getODataEntity( + client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input)); + assertNotNull(entity); + assertEquals("olingo.odata.test1.ETCont", entity.getTypeName().getFullQualifiedNameAsString()); + } + + @Test + public void testContainmentNavOnSingleton() throws Exception { + final InputStream input = getClass().getResourceAsStream( + "containmentNav3." + getSuffix(ContentType.JSON_FULL_METADATA)); + final ClientEntity entity = getEdmEnabledClient1().getBinder().getODataEntity( + client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input)); + assertNotNull(entity); + assertEquals("olingo.odata.test1.ETCont", entity.getTypeName().getFullQualifiedNameAsString()); + } } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json new file mode 100644 index 0000000..b864163 --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json @@ -0,0 +1,33 @@ +{ + "@odata.context": "../../$metadata#ESKeyNavCont(-32766)/NavPropertyETBaseContMany(-32768)/olingo.odata.test1.ETCont/$entity", + "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"", + "[email protected]": "#Int16", + "PropertyInt16": -32768, + "PropertyString": "Second Resource - negative values", + "[email protected]": "#Int32", + "PropertyInt32": -2147483648, + "[email protected]": "#Int64", + "PropertyInt64": -9223372036854775808, + "[email protected]": "#Single", + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "[email protected]": "#Decimal", + "PropertyDecimal": -34, + "[email protected]": "#Binary", + "PropertyBinary": "ASNFZ4mrze8=", + "[email protected]": "#Date", + "PropertyDate": "2015-11-05", + "[email protected]": "#DateTimeOffset", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "[email protected]": "#Duration", + "PropertyDuration": "PT9S", + "[email protected]": "#Guid", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "[email protected]": "#TimeOfDay", + "PropertyTimeOfDay": "23:49:14", + "PropertyBoolean": false, + "[email protected]": "#Byte", + "PropertyByte": 0, + "[email protected]": "#SByte", + "PropertySByte": -128 +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json new file mode 100644 index 0000000..f752e0d --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json @@ -0,0 +1,36 @@ +{ + "@odata.context": "../../$metadata#ESKeyNavCont(-32766)/NavPropertyETBaseContMany(0)/NavPropertyETBaseContTwoContMany", + "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"", + "value": [ + { + "PropertyInt16": -32768, + "PropertyString": "Second Resource - negative values", + "PropertyInt32": -2147483648, + "PropertyInt64": -9223372036854775808, + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "PropertyDecimal": -34, + "PropertyBinary": "ASNFZ4mrze8=", + "PropertyDate": "2015-11-05", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "PropertyDuration": "PT9S", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "PropertyTimeOfDay": "23:49:14" + }, + { + "PropertyInt16": 0, + "PropertyString": "", + "PropertyInt32": 0, + "PropertyInt64": 0, + "PropertySingle": 0, + "PropertyDouble": 0, + "PropertyDecimal": 0, + "PropertyBinary": "", + "PropertyDate": "1970-01-01", + "PropertyDateTimeOffset": "2005-12-03T00:00:00Z", + "PropertyDuration": "PT0S", + "PropertyGuid": "76543201-23ab-cdef-0123-456789cccddd", + "PropertyTimeOfDay": "00:01:01" + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json new file mode 100644 index 0000000..bc7113b --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json @@ -0,0 +1,33 @@ +{ + "@odata.context": "../../$metadata#ESKeyNavCont(-32766)/PropertyCompNavCont/NavPropertyETTwoKeyNavETContOne/$entity", + "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"", + "[email protected]": "#Int16", + "PropertyInt16": -32768, + "PropertyString": "Second Resource - negative values", + "[email protected]": "#Int32", + "PropertyInt32": -2147483648, + "[email protected]": "#Int64", + "PropertyInt64": -9223372036854775808, + "[email protected]": "#Single", + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "[email protected]": "#Decimal", + "PropertyDecimal": -34, + "[email protected]": "#Binary", + "PropertyBinary": "ASNFZ4mrze8=", + "[email protected]": "#Date", + "PropertyDate": "2015-11-05", + "[email protected]": "#DateTimeOffset", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "[email protected]": "#Duration", + "PropertyDuration": "PT9S", + "[email protected]": "#Guid", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "[email protected]": "#TimeOfDay", + "PropertyTimeOfDay": "23:49:14", + "PropertyBoolean": false, + "[email protected]": "#Byte", + "PropertyByte": 0, + "[email protected]": "#SByte", + "PropertySByte": -128 +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json new file mode 100644 index 0000000..bd17c0e --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json @@ -0,0 +1,33 @@ +{ + "@odata.context": "../../$metadata#SI/PropertyCompNavCont/NavPropertyETTwoKeyNavETContOne/$entity", + "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"", + "[email protected]": "#Int16", + "PropertyInt16": -32768, + "PropertyString": "Second Resource - negative values", + "[email protected]": "#Int32", + "PropertyInt32": -2147483648, + "[email protected]": "#Int64", + "PropertyInt64": -9223372036854775808, + "[email protected]": "#Single", + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "[email protected]": "#Decimal", + "PropertyDecimal": -34, + "[email protected]": "#Binary", + "PropertyBinary": "ASNFZ4mrze8=", + "[email protected]": "#Date", + "PropertyDate": "2015-11-05", + "[email protected]": "#DateTimeOffset", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "[email protected]": "#Duration", + "PropertyDuration": "PT9S", + "[email protected]": "#Guid", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "[email protected]": "#TimeOfDay", + "PropertyTimeOfDay": "23:49:14", + "PropertyBoolean": false, + "[email protected]": "#Byte", + "PropertyByte": 0, + "[email protected]": "#SByte", + "PropertySByte": -128 +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json new file mode 100644 index 0000000..d317ef1 --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json @@ -0,0 +1,68 @@ +{ + "@odata.context": "../../$metadata#SI/NavPropertyETContMany", + "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"", + "value": [ + { + "[email protected]": "#Int16", + "PropertyInt16": -32768, + "PropertyString": "Second Resource - negative values", + "[email protected]": "#Int32", + "PropertyInt32": -2147483648, + "[email protected]": "#Int64", + "PropertyInt64": -9223372036854775808, + "[email protected]": "#Single", + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "[email protected]": "#Decimal", + "PropertyDecimal": -34, + "[email protected]": "#Binary", + "PropertyBinary": "ASNFZ4mrze8=", + "[email protected]": "#Date", + "PropertyDate": "2015-11-05", + "[email protected]": "#DateTimeOffset", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "[email protected]": "#Duration", + "PropertyDuration": "PT9S", + "[email protected]": "#Guid", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "[email protected]": "#TimeOfDay", + "PropertyTimeOfDay": "23:49:14", + "PropertyBoolean": false, + "[email protected]": "#Byte", + "PropertyByte": 0, + "[email protected]": "#SByte", + "PropertySByte": -128 + }, + { + "[email protected]": "#Int16", + "PropertyInt16": -365, + "PropertyString": "Second Resource - negative values", + "[email protected]": "#Int32", + "PropertyInt32": -2147483648, + "[email protected]": "#Int64", + "PropertyInt64": -9223372036854775808, + "[email protected]": "#Single", + "PropertySingle": -179000000, + "PropertyDouble": -179000, + "[email protected]": "#Decimal", + "PropertyDecimal": -34, + "[email protected]": "#Binary", + "PropertyBinary": "ASNFZ4mrze8=", + "[email protected]": "#Date", + "PropertyDate": "2015-11-05", + "[email protected]": "#DateTimeOffset", + "PropertyDateTimeOffset": "2005-12-03T07:17:08Z", + "[email protected]": "#Duration", + "PropertyDuration": "PT9S", + "[email protected]": "#Guid", + "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff", + "[email protected]": "#TimeOfDay", + "PropertyTimeOfDay": "23:49:14", + "PropertyBoolean": false, + "[email protected]": "#Byte", + "PropertyByte": 0, + "[email protected]": "#SByte", + "PropertySByte": -128 + } + ] +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml ---------------------------------------------------------------------- diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml new file mode 100644 index 0000000..4be77ab --- /dev/null +++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml @@ -0,0 +1,139 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> + <edmx:Reference Uri="../v4.0/cs02/vocabularies/Org.OData.Core.V1.xml"> + <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core" /> + </edmx:Reference> + <edmx:DataServices> + <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" + Namespace="olingo.odata.test1" Alias="Namespace1_Alias"> + <EntityType Name="ETKeyNavCont"> + <Key> + <PropertyRef Name="PropertyInt16" /> + </Key> + <Property Name="PropertyInt16" Type="Edm.Int16" Nullable="false" /> + <Property Name="PropertyString" Type="Edm.String" Nullable="false" /> + <Property Name="PropertyCompNavCont" Type="Namespace1_Alias.CTNavCont" /> + <NavigationProperty Name="NavPropertyETContOne" + Type="Namespace1_Alias.ETCont" ContainsTarget="true" /> + <NavigationProperty Name="NavPropertyETContMany" + Type="Collection(Namespace1_Alias.ETCont)" ContainsTarget="true" /> + <NavigationProperty Name="NavPropertyETBaseContMany" + Type="Collection(Namespace1_Alias.ETBaseCont)" ContainsTarget="true" /> + </EntityType> + <EntityType Name="ETBaseCont"> + <Key> + <PropertyRef Name="PropertyInt16" /> + </Key> + <Property Name="PropertyInt16" Type="Edm.Int16" Nullable="false" /> + <Property Name="PropertyString" Type="Edm.String" /> + <Property Name="PropertyInt32" Type="Edm.Int32" /> + <Property Name="PropertyInt64" Type="Edm.Int64" /> + <Property Name="PropertySingle" Type="Edm.Single" /> + <Property Name="PropertyDouble" Type="Edm.Double" /> + <Property Name="PropertyDecimal" Type="Edm.Decimal" Scale="10" /> + <Property Name="PropertyBinary" Type="Edm.Binary" /> + <Property Name="PropertyDate" Type="Edm.Date" /> + <Property Name="PropertyDateTimeOffset" Type="Edm.DateTimeOffset" /> + <Property Name="PropertyDuration" Type="Edm.Duration" /> + <Property Name="PropertyGuid" Type="Edm.Guid" /> + <Property Name="PropertyTimeOfDay" Type="Edm.TimeOfDay" /> + <NavigationProperty Name="NavPropertyETBaseContTwoContMany" + Type="Collection(Namespace1_Alias.ETTwoCont)" ContainsTarget="true" /> + <NavigationProperty Name="NavPropertyETBaseContTwoContOne" + Type="Namespace1_Alias.ETTwoCont" Nullable="false" ContainsTarget="true" /> + </EntityType> + <EntityType Name="ETCont" BaseType="Namespace1_Alias.ETBaseCont"> + <Property Name="PropertyBoolean" Type="Edm.Boolean" /> + <Property Name="PropertyByte" Type="Edm.Byte" /> + <Property Name="PropertySByte" Type="Edm.SByte" /> + </EntityType> + <EntityType Name="ETTwoCont"> + <Key> + <PropertyRef Name="PropertyInt16" /> + <PropertyRef Name="PropertyString" /> + </Key> + <Property Name="PropertyInt16" Type="Edm.Int16" Nullable="false" /> + <Property Name="PropertyString" Type="Edm.String" Nullable="false" /> + <Property Name="PropertyInt32" Type="Edm.Int32" /> + <Property Name="PropertyInt64" Type="Edm.Int64" /> + <Property Name="PropertySingle" Type="Edm.Single" /> + <Property Name="PropertyDouble" Type="Edm.Double" /> + <Property Name="PropertyDecimal" Type="Edm.Decimal" Scale="10" /> + <Property Name="PropertyBinary" Type="Edm.Binary" /> + <Property Name="PropertyDate" Type="Edm.Date" /> + <Property Name="PropertyDateTimeOffset" Type="Edm.DateTimeOffset" /> + <Property Name="PropertyDuration" Type="Edm.Duration" /> + <Property Name="PropertyGuid" Type="Edm.Guid" /> + <Property Name="PropertyTimeOfDay" Type="Edm.TimeOfDay" /> + </EntityType> + <ComplexType Name="CTNavCont"> + <NavigationProperty Name="NavPropertyETTwoKeyNavETContOne" + Type="Namespace1_Alias.ETCont" ContainsTarget="true" /> + <NavigationProperty Name="NavPropertyETTwoKeyNavETContMany" + Type="Collection(Namespace1_Alias.ETBaseCont)" ContainsTarget="true" /> + </ComplexType> + <EntityType Name="ETTwoPrim"> + <Key> + <PropertyRef Name="PropertyInt16" /> + </Key> + <Property Name="PropertyInt16" Type="Edm.Int16" Nullable="false" /> + <Property Name="PropertyString" Type="Edm.String" /> + <Property Name="PropertyCompNavCont" Type="Namespace1_Alias.CTNavCont" /> + <NavigationProperty Name="NavPropertyETContOne" + Type="Namespace1_Alias.ETCont" ContainsTarget="true" /> + <NavigationProperty Name="NavPropertyETContMany" + Type="Collection(Namespace1_Alias.ETCont)" ContainsTarget="true" /> + </EntityType> + <EntityContainer Name="Container"> + <EntitySet Name="ESKeyNavCont" EntityType="Namespace1_Alias.ETKeyNavCont"> + <NavigationPropertyBinding + Path="NavPropertyETTwoKeyNavOne/NavPropertyETKeyNavOne" Target="ESKeyNav" /> + <NavigationPropertyBinding + Path="NavPropertyETTwoKeyNavMany/NavPropertyETKeyNavOne" Target="ESKeyNav" /> + <NavigationPropertyBinding Path="NavPropertyETTwoKeyNavContOne" + Target="ESTwoKeyNavCont" /> + <NavigationPropertyBinding Path="NavPropertyETTwoKeyNavContMany" + Target="ESTwoKeyNavCont" /> + <NavigationPropertyBinding + Path="PropertyCompNavCont/NavPropertyETKeyNavOne/NavPropertyETKeyNavOne" + Target="ESKeyNav" /> + <NavigationPropertyBinding + Path="PropertyCompNavCont/NavPropertyETKeyNavMany/NavPropertyETKeyNavOne" + Target="ESKeyNav" /> + <NavigationPropertyBinding + Path="PropertyCompNavCont/NavPropertyETTwoKeyNavOne/NavPropertyETKeyNavOne" + Target="ESKeyNav" /> + <NavigationPropertyBinding + Path="PropertyCompNavCont/NavPropertyETTwoKeyNavMany/NavPropertyETKeyNavOne" + Target="ESKeyNav" /> + <Annotation Term="Core.Description"> + <String>Contains entities with containment navigation properties + </String> + </Annotation> + <Annotation Term="Namespace1_Alias.Data"> + <Bool>false</Bool> + </Annotation> + </EntitySet> + <Singleton Name="SI" Type="Namespace1_Alias.ETTwoPrim" /> + </EntityContainer> + </Schema> + </edmx:DataServices> +</edmx:Edmx> \ No newline at end of file
