/// <summary>
            /// Returns the entity set for the given payload element (only for entries and feeds).
            /// </summary>
            /// <param name="expectedTypeAnnotation">The expected type annotation.</param>
            /// <param name="model">The model to get the type from.</param>
            /// <param name="payloadElement">The payload element to get the expected type for.</param>
            /// <returns>The expected type for the specified payload element.</returns>
            private static IEdmEntitySet GetExpectedEntitySet(ExpectedTypeODataPayloadElementAnnotation expectedTypeAnnotation, IEdmModel model, ODataPayloadElement payloadElement)
            {
                ExceptionUtilities.Assert(model != null, "model != null");
                ExceptionUtilities.Assert(payloadElement != null, "payloadElement != null");

                if (payloadElement.GetAnnotation <IgnoreEntitySetAnnotation>() != null)
                {
                    // Entity set information is explicitly ignored
                    return(null);
                }

                if (expectedTypeAnnotation != null)
                {
                    if (expectedTypeAnnotation.EdmEntitySet != null)
                    {
                        return(expectedTypeAnnotation.EdmEntitySet);
                    }
                    EntitySet entitySet = expectedTypeAnnotation.EntitySet;
                    if (entitySet != null)
                    {
                        return(model.EntityContainersAcrossModels().Select(m => m.FindEntitySet(entitySet.Name)).FirstOrDefault(s => s != null));
                    }
                }

                EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();

                if (typeAnnotation != null)
                {
                    var edmEntityType = typeAnnotation.EdmModelType;
                    return(model.EntityContainersAcrossModels().First().EntitySets().SingleOrDefault(es => es.EntityType().FullName() == edmEntityType.FullName()));
                }

                return(null);
            }
Example #2
0
        private ODataUri BuildODataUri(ODataPayloadElement payload)
        {
            var entityInstance = payload as EntityInstance;

            if (entityInstance != null)
            {
                EntityModelTypeAnnotation type = entityInstance.GetAnnotation <EntityModelTypeAnnotation>();
                ExceptionUtilities.CheckObjectNotNull(type, "Type annotation was expected");

                var entityType = ((EntityDataType)type.EntityModelType).Definition;

                // First is OK because MEST doesnt matter
                var entitySet = entityType.Model.EntityContainers.SelectMany(c => c.EntitySets).First(s => s.EntityType == entityType);
                return(new ODataUri(ODataUriBuilder.EntitySet(entitySet)));
            }
            var complexProperty = payload as ComplexProperty;

            if (complexProperty != null)
            {
                EntityModelTypeAnnotation type = entityInstance.GetAnnotation <EntityModelTypeAnnotation>();
                ExceptionUtilities.CheckObjectNotNull(type, "Type annotation was expected");

                var entityType = ((EntityDataType)type.EntityModelType).Definition;

                // First is OK because MEST doesnt matter
                var entitySet = entityType.Model.EntityContainers.SelectMany(c => c.EntitySets).First(s => s.EntityType == entityType);
                return(new ODataUri(ODataUriBuilder.EntitySet(entitySet)));
            }

            // TODO: Add support for other types
            return(null);
        }
Example #3
0
        /// <summary>
        /// Visits the payload element
        /// </summary>
        /// <param name="payloadElement">The payload element to visit</param>
        public override void Visit(ComplexMultiValue payloadElement)
        {
            EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();

            if (payloadElement.FullTypeName == null && typeAnnotation != null)
            {
                payloadElement.FullTypeName = EntityModelUtils.GetCollectionTypeName(((IEdmCollectionTypeReference)typeAnnotation.EdmModelType).ElementType().FullName());
            }

            base.Visit(payloadElement);
        }
Example #4
0
        /// <summary>
        /// Visits the payload element
        /// </summary>
        /// <param name="payloadElement">The payload element to visit</param>
        public override void Visit(EntityInstance payloadElement)
        {
            EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();

            if (payloadElement.FullTypeName == null && typeAnnotation != null)
            {
                payloadElement.FullTypeName = ((IEdmEntityTypeReference)typeAnnotation.EdmModelType).FullName();
            }

            base.Visit(payloadElement);
        }
Example #5
0
        /// <summary>
        /// Visits the payload element
        /// </summary>
        /// <param name="payloadElement">The payload element to visit</param>
        public override void Visit(PrimitiveValue payloadElement)
        {
            if (!payloadElement.IsNull)
            {
                EntityModelTypeAnnotation typeAnnotation = payloadElement.GetAnnotation <EntityModelTypeAnnotation>();
                if (payloadElement.FullTypeName == null && typeAnnotation != null)
                {
                    payloadElement.FullTypeName = ((IEdmPrimitiveTypeReference)typeAnnotation.EdmModelType).FullName();
                }
            }

            base.Visit(payloadElement);
        }