示例#1
0
        /// <summary>
        /// Gets the <see cref="EntityType"/> of the specified entry or feed payload element.
        /// </summary>
        /// <param name="payloadElement">The payload element to get the entity type for.</param>
        /// <param name="model">The model to find the entity type in.</param>
        /// <returns>The <see cref="EntityType"/> of the <paramref name="payloadElement"/>.</returns>
        public static IEdmEntityType GetPayloadElementEntityType(ODataPayloadElement payloadElement, IEdmModel model)
        {
            ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement");
            ExceptionUtilities.CheckArgumentNotNull(model, "model");

            ODataPayloadKind payloadKind = payloadElement.GetPayloadKindFromPayloadElement();

            ExceptionUtilities.Assert(
                payloadKind == ODataPayloadKind.Resource || payloadKind == ODataPayloadKind.ResourceSet,
                "Can only determine entity type for entry or feed payloads.");

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

            if (typeAnnotation != null)
            {
                var entityDataType = typeAnnotation.EdmModelType;
                Debug.Assert(entityDataType != null, "entityDataType != null");
                return(model.EntityTypes().Single(et => et.FullName() == entityDataType.FullName()));
            }

            string entityTypeName;

            if (payloadKind == ODataPayloadKind.Resource)
            {
                EntityInstance entity = payloadElement as EntityInstance;
                Debug.Assert(entity != null, "entity != null");
                entityTypeName = entity.FullTypeName;
                return(model.EntityTypes().Single(et => et.TestFullName() == entityTypeName));
            }
            else
            {
                //if feed has entries figure out type otherwise use first entity type
                EntitySetInstance feed = payloadElement as EntitySetInstance;
                Debug.Assert(feed != null, "feed != null");
                if (feed.Count > 0)
                {
                    return(model.EntityTypes().Single(et => et.TestFullName() == ((TypedValue)feed.First()).FullTypeName));
                }
                else
                {
                    return(model.EntityTypes().First());
                }
            }
        }