private void InitializeAndBuildTree() { lock (this.epmDataLock) { if (this.EpmNeedsInitializing) { System.Data.Services.Client.Serializers.EpmTargetTree epmTargetTree = new System.Data.Services.Client.Serializers.EpmTargetTree(); System.Data.Services.Client.Serializers.EpmSourceTree sourceTree = new System.Data.Services.Client.Serializers.EpmSourceTree(epmTargetTree); BuildEpmInfo(this.clientTypeAnnotation, sourceTree); sourceTree.Validate(this.clientTypeAnnotation); this.epmTargetTree = epmTargetTree; this.epmSourceTree = sourceTree; } } }
private void InitializeAndBuildTree() { lock (this.epmDataLock) { if (this.EpmNeedsInitializing) { System.Data.Services.Client.Serializers.EpmTargetTree epmTargetTree = new System.Data.Services.Client.Serializers.EpmTargetTree(); System.Data.Services.Client.Serializers.EpmSourceTree sourceTree = new System.Data.Services.Client.Serializers.EpmSourceTree(epmTargetTree); BuildEpmInfo(this.clientTypeAnnotation, sourceTree); sourceTree.Validate(this.clientTypeAnnotation); this.epmTargetTree = epmTargetTree; this.epmSourceTree = sourceTree; } } }
private static void BuildEpmInfo(Type type, ClientTypeAnnotation clientTypeAnnotation, System.Data.Services.Client.Serializers.EpmSourceTree sourceTree) { if (clientTypeAnnotation.IsEntityType) { Func <EntityPropertyMappingAttribute, bool> predicate = null; Type baseType = type.BaseType; ClientTypeAnnotation annotation = null; ClientEdmModel model = ClientEdmModel.GetModel(clientTypeAnnotation.MaxProtocolVersion); ODataEntityPropertyMappingCollection mappings = null; if ((baseType != null) && (baseType != typeof(object))) { if (((EdmStructuredType)clientTypeAnnotation.EdmType).BaseType == null) { BuildEpmInfo(baseType, clientTypeAnnotation, sourceTree); mappings = model.GetAnnotationValue <ODataEntityPropertyMappingCollection>(clientTypeAnnotation.EdmType); } else { annotation = model.GetClientTypeAnnotation(baseType); BuildEpmInfo(baseType, annotation, sourceTree); } } foreach (EntityPropertyMappingAttribute attribute in type.GetCustomAttributes(typeof(EntityPropertyMappingAttribute), false)) { BuildEpmInfo(attribute, type, clientTypeAnnotation, sourceTree); if (mappings == null) { mappings = new ODataEntityPropertyMappingCollection(); } mappings.Add(attribute); } if (mappings != null) { ODataEntityPropertyMappingCollection annotationValue = model.GetAnnotationValue <ODataEntityPropertyMappingCollection>(clientTypeAnnotation.EdmType); if (annotationValue != null) { if (predicate == null) { predicate = oldM => !mappings.Any <EntityPropertyMappingAttribute>(newM => (oldM.SourcePath == newM.SourcePath)); } foreach (EntityPropertyMappingAttribute attribute2 in annotationValue.Where <EntityPropertyMappingAttribute>(predicate).ToList <EntityPropertyMappingAttribute>()) { mappings.Add(attribute2); } } model.SetAnnotationValue <ODataEntityPropertyMappingCollection>(clientTypeAnnotation.EdmType, mappings); } } }
private static void BuildEpmInfo(EntityPropertyMappingAttribute epmAttr, Type definingType, ClientTypeAnnotation clientTypeAnnotation, System.Data.Services.Client.Serializers.EpmSourceTree sourceTree) { sourceTree.Add(new System.Data.Services.Client.Serializers.EntityPropertyMappingInfo(epmAttr, definingType, clientTypeAnnotation)); }
private static void BuildEpmInfo(ClientTypeAnnotation clientTypeAnnotation, System.Data.Services.Client.Serializers.EpmSourceTree sourceTree) { BuildEpmInfo(clientTypeAnnotation.ElementType, clientTypeAnnotation, sourceTree); }