/// <summary> /// Generates the navigation property. /// </summary> /// <param name="xmlNamespace">The XML namespace.</param> /// <param name="prop">The Navigation property.</param> /// <returns>IEnumerable of XElement</returns> protected override XElement GenerateNavigationProperty(XNamespace xmlNamespace, NavigationProperty prop) { var content = base.GenerateNavigationProperty(xmlNamespace, prop); PropertyAccessModifierAnnotation accessModifierAnnotation = prop.Annotations.OfType <PropertyAccessModifierAnnotation>().SingleOrDefault(); if (accessModifierAnnotation != null) { content.Add(GeneratePropertyAccessModifier(accessModifierAnnotation)); } return(content); }
private static IEnumerable <XAttribute> GeneratePropertyAccessModifier(PropertyAccessModifierAnnotation annotation) { List <XAttribute> visibilities = new List <XAttribute>(); AccessModifier getterVisibility = annotation.GetterAccessModifier; AccessModifier setterVisibility = annotation.SetterAccessModifier; if (getterVisibility != AccessModifier.Unspecified) { visibilities.Add(new XAttribute(EdmConstants.CodegenNamespace + "GetterAccess", annotation.GetterAccessModifier.ToString())); } if (setterVisibility != AccessModifier.Unspecified) { visibilities.Add(new XAttribute(EdmConstants.CodegenNamespace + "SetterAccess", annotation.SetterAccessModifier.ToString())); } return(visibilities.Count > 0 ? visibilities : null); }
/// <summary> /// Generates Property element for a given <see cref="MemberProperty"/> /// </summary> /// <param name="xmlNamespace">XML namespace to use</param> /// <param name="prop">Entity or ComplexType property</param> /// <returns>Property XElement</returns> protected override XElement GenerateProperty(XNamespace xmlNamespace, MemberProperty prop) { var element = base.GenerateProperty(xmlNamespace, prop); PropertyAccessModifierAnnotation accessModifierAnnotation = prop.Annotations.OfType <PropertyAccessModifierAnnotation>().SingleOrDefault(); if (accessModifierAnnotation != null) { element.Add(GeneratePropertyAccessModifier(accessModifierAnnotation)); } CollectionKindAnnotation collectionKindAnnotation = prop.Annotations.OfType <CollectionKindAnnotation>().SingleOrDefault(); if (collectionKindAnnotation != null) { element.Add(new XAttribute("CollectionKind", collectionKindAnnotation.CollectionKind.ToString())); } return(element); }
private static void ApplyPropertyAccessModifier(CodeMemberAutoImplementedProperty codeProp, PropertyAccessModifierAnnotation propertyAccessModifierAnnotation) { if (propertyAccessModifierAnnotation != null) { var maxVisibility = (AccessModifier)Math.Max( (int)propertyAccessModifierAnnotation.GetterAccessModifier, (int)propertyAccessModifierAnnotation.SetterAccessModifier); codeProp.Attributes &= ~MemberAttributes.AccessMask; codeProp.Attributes |= ConvertAccessModifierToMemberAttributes(maxVisibility); if (maxVisibility != propertyAccessModifierAnnotation.GetterAccessModifier) { codeProp.GetAttributes = ConvertAccessModifierToMemberAttributes(propertyAccessModifierAnnotation.GetterAccessModifier); } if (maxVisibility != propertyAccessModifierAnnotation.SetterAccessModifier) { codeProp.SetAttributes = ConvertAccessModifierToMemberAttributes(propertyAccessModifierAnnotation.SetterAccessModifier); } } }