private PropertyInstance BuildProperty(IEdmProperty property) { if (property.Type.IsCollection()) { var type = (IEdmCollectionType)property.Type.Definition; if (type.ElementType.IsComplex()) { var complex = new ComplexInstance(property.Type.FullName(), false).WithTypeAnnotation(type.ElementType.Definition); foreach (var prop in ((IEdmComplexType)type.ElementType.Definition).StructuralProperties()) { complex.Add(this.BuildProperty(prop)); } return(new ComplexMultiValueProperty(property.Name, new ComplexMultiValue(property.Type.FullName(), false, complex)).WithTypeAnnotation(type)); } return(new PrimitiveMultiValueProperty(property.Name, new PrimitiveMultiValue(property.Type.FullName(), false, this.GetValue((IEdmPrimitiveTypeReference)type.ElementType))).WithTypeAnnotation(property.Type)); } if (property.IsComplex()) { var complex = new ComplexInstance(property.Type.FullName(), false); foreach (var prop in ((IEdmComplexType)property.Type.Definition).StructuralProperties()) { complex.Add(this.BuildProperty(prop)); } return(new ComplexProperty(property.Name, complex).WithTypeAnnotation(property.Type)); } return(new PrimitiveProperty((property.Name), this.GetValue((IEdmPrimitiveTypeReference)property.Type)).WithTypeAnnotation(property.Type)); }