/// <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()); } } }