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