/// <summary> /// Gets the property info for the EDM property declared on this type. /// </summary> /// <param name="structuredType">The structured type to get the property on.</param> /// <param name="property">Property instance to get the property info for.</param> /// <param name="model">The model containing annotations.</param> /// <returns>Returns the PropertyInfo object for the specified EDM property.</returns> internal PropertyInfo GetPropertyInfo(IEdmStructuredType structuredType, IEdmProperty property, IEdmModel model) { DebugUtils.CheckNoExternalCallers(); Debug.Assert(structuredType != null, "structuredType != null"); Debug.Assert(property != null, "property != null"); Debug.Assert(model != null, "model != null"); Debug.Assert(property.GetCanReflectOnInstanceTypeProperty(model), "property.CanReflectOnInstanceTypeProperty()"); #if DEBUG Debug.Assert(structuredType.ContainsProperty(property), "The structuredType does not define the specified property."); #endif if (this.propertyInfosDeclaredOnThisType == null) { this.propertyInfosDeclaredOnThisType = new Dictionary<IEdmProperty, PropertyInfo>(ReferenceEqualityComparer<IEdmProperty>.Instance); } PropertyInfo propertyInfo; if (!this.propertyInfosDeclaredOnThisType.TryGetValue(property, out propertyInfo)) { BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance; propertyInfo = structuredType.GetInstanceType(model).GetProperty(property.Name, bindingFlags); if (propertyInfo == null) { throw new ODataException(Strings.PropertyInfoTypeAnnotation_CannotFindProperty(structuredType.ODataFullName(), structuredType.GetInstanceType(model), property.Name)); } this.propertyInfosDeclaredOnThisType.Add(property, propertyInfo); } Debug.Assert(propertyInfo != null, "propertyInfo != null"); return propertyInfo; }
/// <summary> /// Gets the property info for the EDM property declared on this type. /// </summary> /// <param name="structuredType">The structured type to get the property on.</param> /// <param name="property">Property instance to get the property info for.</param> /// <param name="model">The model containing annotations.</param> /// <returns>Returns the PropertyInfo object for the specified EDM property.</returns> internal PropertyInfo GetPropertyInfo(IEdmStructuredType structuredType, IEdmProperty property, IEdmModel model) { Debug.Assert(structuredType != null, "structuredType != null"); Debug.Assert(property != null, "property != null"); Debug.Assert(model != null, "model != null"); Debug.Assert(property.GetCanReflectOnInstanceTypeProperty(model), "property.CanReflectOnInstanceTypeProperty()"); #if DEBUG Debug.Assert(structuredType.ContainsProperty(property), "The structuredType does not define the specified property."); #endif if (this.propertyInfosDeclaredOnThisType == null) { this.propertyInfosDeclaredOnThisType = new Dictionary <IEdmProperty, PropertyInfo>(ReferenceEqualityComparer <IEdmProperty> .Instance); } PropertyInfo propertyInfo; if (!this.propertyInfosDeclaredOnThisType.TryGetValue(property, out propertyInfo)) { BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance; propertyInfo = structuredType.GetInstanceType(model).GetProperty(property.Name, bindingFlags); if (propertyInfo == null) { throw new ODataException(ODataErrorStrings.PropertyInfoTypeAnnotation_CannotFindProperty(structuredType.ODataFullName(), structuredType.GetInstanceType(model), property.Name)); } this.propertyInfosDeclaredOnThisType.Add(property, propertyInfo); } Debug.Assert(propertyInfo != null, "propertyInfo != null"); return(propertyInfo); }