internal ResourceAssociationTypeEnd(string name, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty, string multiplicity, EdmOnDeleteAction deleteBehavior)
 {
     this.name             = name;
     this.resourceType     = resourceType;
     this.resourceProperty = resourceProperty;
     this.multiplicity     = multiplicity;
     this.deleteAction     = deleteBehavior;
 }
Exemplo n.º 2
0
 internal ResourceAssociationTypeEnd(string name, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty, string multiplicity, EdmOnDeleteAction deleteBehavior)
 {
     this.name = name;
     this.resourceType = resourceType;
     this.resourceProperty = resourceProperty;
     this.multiplicity = multiplicity;
     this.deleteAction = deleteBehavior;
 }
Exemplo n.º 3
0
 public ResourceProperty(string name, ResourcePropertyKind kind, System.Data.Services.Providers.ResourceType propertyResourceType)
 {
     WebUtil.CheckStringArgumentNullOrEmpty(name, "name");
     WebUtil.CheckArgumentNull<System.Data.Services.Providers.ResourceType>(propertyResourceType, "propertyResourceType");
     ValidatePropertyParameters(kind, propertyResourceType);
     this.kind = kind;
     this.name = name;
     this.propertyResourceType = propertyResourceType;
     this.canReflectOnInstanceTypeProperty = !kind.HasFlag(ResourcePropertyKind.Stream);
 }
Exemplo n.º 4
0
 public ResourceProperty(string name, ResourcePropertyKind kind, System.Data.Services.Providers.ResourceType propertyResourceType)
 {
     WebUtil.CheckStringArgumentNullOrEmpty(name, "name");
     WebUtil.CheckArgumentNull <System.Data.Services.Providers.ResourceType>(propertyResourceType, "propertyResourceType");
     ValidatePropertyParameters(kind, propertyResourceType);
     this.kind = kind;
     this.name = name;
     this.propertyResourceType             = propertyResourceType;
     this.canReflectOnInstanceTypeProperty = !kind.HasFlag(ResourcePropertyKind.Stream);
 }
Exemplo n.º 5
0
 public ResourceSet(string name, System.Data.Services.Providers.ResourceType elementType)
 {
     WebUtil.CheckStringArgumentNullOrEmpty(name, "name");
     WebUtil.CheckArgumentNull <System.Data.Services.Providers.ResourceType>(elementType, "elementType");
     if (elementType.ResourceTypeKind != ResourceTypeKind.EntityType)
     {
         throw new ArgumentException(System.Data.Services.Strings.ResourceContainer_ContainerMustBeAssociatedWithEntityType);
     }
     this.name          = name;
     this.elementType   = elementType;
     this.queryRootType = typeof(IQueryable <>).MakeGenericType(new Type[] { elementType.InstanceType });
 }
Exemplo n.º 6
0
 public ResourceSet(string name, System.Data.Services.Providers.ResourceType elementType)
 {
     WebUtil.CheckStringArgumentNullOrEmpty(name, "name");
     WebUtil.CheckArgumentNull<System.Data.Services.Providers.ResourceType>(elementType, "elementType");
     if (elementType.ResourceTypeKind != ResourceTypeKind.EntityType)
     {
         throw new ArgumentException(System.Data.Services.Strings.ResourceContainer_ContainerMustBeAssociatedWithEntityType);
     }
     this.name = name;
     this.elementType = elementType;
     this.queryRootType = typeof(IQueryable<>).MakeGenericType(new Type[] { elementType.InstanceType });
 }
 internal ResourceAssociationTypeEnd(string name, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty, System.Data.Services.Providers.ResourceProperty fromProperty)
 {
     this.name             = name;
     this.resourceType     = resourceType;
     this.resourceProperty = resourceProperty;
     if ((fromProperty != null) && (fromProperty.Kind == ResourcePropertyKind.ResourceReference))
     {
         this.multiplicity = "0..1";
     }
     else
     {
         this.multiplicity = "*";
     }
 }
Exemplo n.º 8
0
 internal ResourceAssociationTypeEnd(string name, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty, System.Data.Services.Providers.ResourceProperty fromProperty)
 {
     this.name = name;
     this.resourceType = resourceType;
     this.resourceProperty = resourceProperty;
     if ((fromProperty != null) && (fromProperty.Kind == ResourcePropertyKind.ResourceReference))
     {
         this.multiplicity = "0..1";
     }
     else
     {
         this.multiplicity = "*";
     }
 }
Exemplo n.º 9
0
 public ResourceAssociationSetEnd(System.Data.Services.Providers.ResourceSet resourceSet, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty)
 {
     WebUtil.CheckArgumentNull <System.Data.Services.Providers.ResourceSet>(resourceSet, "resourceSet");
     WebUtil.CheckArgumentNull <System.Data.Services.Providers.ResourceType>(resourceType, "resourceType");
     if ((resourceProperty != null) && ((resourceType.TryResolvePropertyName(resourceProperty.Name) == null) || (resourceProperty.TypeKind != ResourceTypeKind.EntityType)))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourcePropertyMustBeNavigationPropertyOnResourceType);
     }
     if (!resourceSet.ResourceType.IsAssignableFrom(resourceType) && !resourceType.IsAssignableFrom(resourceSet.ResourceType))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourceTypeMustBeAssignableToResourceSet);
     }
     if ((resourceProperty != null) && (DataServiceProviderWrapper.GetDeclaringTypeForProperty(resourceType, resourceProperty, null) != resourceType))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourceTypeMustBeTheDeclaringType(resourceType.FullName, resourceProperty.Name));
     }
     this.resourceSet      = resourceSet;
     this.resourceType     = resourceType;
     this.resourceProperty = resourceProperty;
 }
Exemplo n.º 10
0
 public ResourceAssociationSetEnd(System.Data.Services.Providers.ResourceSet resourceSet, System.Data.Services.Providers.ResourceType resourceType, System.Data.Services.Providers.ResourceProperty resourceProperty)
 {
     WebUtil.CheckArgumentNull<System.Data.Services.Providers.ResourceSet>(resourceSet, "resourceSet");
     WebUtil.CheckArgumentNull<System.Data.Services.Providers.ResourceType>(resourceType, "resourceType");
     if ((resourceProperty != null) && ((resourceType.TryResolvePropertyName(resourceProperty.Name) == null) || (resourceProperty.TypeKind != ResourceTypeKind.EntityType)))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourcePropertyMustBeNavigationPropertyOnResourceType);
     }
     if (!resourceSet.ResourceType.IsAssignableFrom(resourceType) && !resourceType.IsAssignableFrom(resourceSet.ResourceType))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourceTypeMustBeAssignableToResourceSet);
     }
     if ((resourceProperty != null) && (DataServiceProviderWrapper.GetDeclaringTypeForProperty(resourceType, resourceProperty, null) != resourceType))
     {
         throw new ArgumentException(Strings.ResourceAssociationSetEnd_ResourceTypeMustBeTheDeclaringType(resourceType.FullName, resourceProperty.Name));
     }
     this.resourceSet = resourceSet;
     this.resourceType = resourceType;
     this.resourceProperty = resourceProperty;
 }
Exemplo n.º 11
0
 private static void ValidatePropertyParameters(ResourcePropertyKind kind, System.Data.Services.Providers.ResourceType propertyResourceType)
 {
     CheckResourcePropertyKind(kind, "kind");
     if ((IsOfKind(kind, ResourcePropertyKind.ResourceReference) || IsOfKind(kind, ResourcePropertyKind.ResourceSetReference)) && (propertyResourceType.ResourceTypeKind != ResourceTypeKind.EntityType))
     {
         throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
     }
     if (IsOfKind(kind, ResourcePropertyKind.Primitive) && (propertyResourceType.ResourceTypeKind != ResourceTypeKind.Primitive))
     {
         throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
     }
     if (IsOfKind(kind, ResourcePropertyKind.ComplexType) && (propertyResourceType.ResourceTypeKind != ResourceTypeKind.ComplexType))
     {
         throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
     }
     if (IsOfKind(kind, ResourcePropertyKind.Collection) && (propertyResourceType.ResourceTypeKind != ResourceTypeKind.Collection))
     {
         throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
     }
     if (IsOfKind(kind, ResourcePropertyKind.Stream))
     {
         if (kind != ResourcePropertyKind.Stream)
         {
             throw new ArgumentException(Strings.ResourceProperty_NamedStreamKindMustBeUsedAlone);
         }
         if (propertyResourceType != System.Data.Services.Providers.ResourceType.PrimitiveResourceTypeMap.GetPrimitive(typeof(Stream)))
         {
             throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
         }
     }
     else if (propertyResourceType == System.Data.Services.Providers.ResourceType.PrimitiveResourceTypeMap.GetPrimitive(typeof(Stream)))
     {
         throw new ArgumentException(Strings.ResourceProperty_PropertyKindAndResourceTypeKindMismatch("kind", "propertyResourceType"));
     }
     if (IsOfKind(kind, ResourcePropertyKind.Key) && (Nullable.GetUnderlyingType(propertyResourceType.InstanceType) != null))
     {
         throw new ArgumentException(Strings.ResourceProperty_KeyPropertiesCannotBeNullable);
     }
 }
Exemplo n.º 12
0
 private void CheckHierarchy(DataServiceProviderWrapper provider)
 {
     if (!this.epmMinDSPV.HasValue)
     {
         System.Data.Services.Providers.ResourceType resourceType = this.resourceSet.ResourceType;
         bool hasEntityPropertyMappings = resourceType.HasEntityPropertyMappings;
         DataServiceProtocolVersion epmMinimumDataServiceProtocolVersion = resourceType.EpmMinimumDataServiceProtocolVersion;
         bool    flag2           = false;
         bool    flag3           = this.GetEntitySerializableProperties(provider, resourceType).Any <ResourceProperty>(p => p.TypeKind == ResourceTypeKind.EntityType);
         bool    isOpenType      = resourceType.IsOpenType;
         Version metadataVersion = resourceType.MetadataVersion;
         if (provider.HasDerivedTypes(resourceType))
         {
             foreach (System.Data.Services.Providers.ResourceType type2 in provider.GetDerivedTypes(resourceType))
             {
                 if (type2.EpmMinimumDataServiceProtocolVersion > epmMinimumDataServiceProtocolVersion)
                 {
                     epmMinimumDataServiceProtocolVersion = type2.EpmMinimumDataServiceProtocolVersion;
                 }
                 hasEntityPropertyMappings |= type2.HasEntityPropertyMappings;
                 bool flag5 = this.GetEntitySerializablePropertiesDeclaredOnTheResourceType(provider, type2).Any <ResourceProperty>(p => p.TypeKind == ResourceTypeKind.EntityType);
                 flag3          |= flag5;
                 flag2          |= type2.HasNamedStreamsDeclaredOnThisType | flag5;
                 metadataVersion = WebUtil.RaiseVersion(metadataVersion, type2.MetadataVersion);
                 isOpenType     |= type2.IsOpenType;
                 if (((epmMinimumDataServiceProtocolVersion == DataServiceProtocolVersion.V3) && (metadataVersion == RequestDescription.Version3Dot0)) && (flag2 && isOpenType))
                 {
                     break;
                 }
             }
         }
         this.hasEntityPropertyMappings = hasEntityPropertyMappings;
         this.epmMinDSPV = new DataServiceProtocolVersion?(epmMinimumDataServiceProtocolVersion);
         this.hasNavigationPropertyOrNamedStreamOnDerivedTypes = flag2;
         this.hasAccessibleNavigationProperty = flag3;
         this.hasOpenTypes    = isOpenType;
         this.metadataVersion = metadataVersion;
     }
 }
Exemplo n.º 13
0
 private static void VerifyPropertyMismatchAndExpandSelectMismatchScenario(ProjectionNode existingNode, ResourceProperty property, System.Data.Services.Providers.ResourceType targetResourceType, bool expandNode)
 {
     if (property != existingNode.Property)
     {
         throw DataServiceException.CreateBadRequestError(System.Data.Services.Strings.RequestQueryProcessor_CannotSpecifyOpenPropertyAndDeclaredPropertyAtTheSameTime(existingNode.PropertyName, (property == null) ? targetResourceType.FullName : existingNode.TargetResourceType.FullName, (property == null) ? existingNode.TargetResourceType.FullName : targetResourceType.FullName));
     }
     if (!System.Data.Services.Providers.ResourceType.CompareReferences(targetResourceType, existingNode.TargetResourceType) && expandNode)
     {
         throw DataServiceException.CreateBadRequestError(System.Data.Services.Strings.RequestQueryProcessor_SelectAndExpandCannotBeSpecifiedTogether(existingNode.PropertyName));
     }
 }
Exemplo n.º 14
0
 internal RootProjectionNode(ResourceSetWrapper resourceSetWrapper, OrderingInfo orderingInfo, Expression filter, int?skipCount, int?takeCount, int?maxResultsExpected, List <ExpandSegmentCollection> expandPaths, System.Data.Services.Providers.ResourceType baseResourceType) : base(string.Empty, null, null, resourceSetWrapper, orderingInfo, filter, skipCount, takeCount, maxResultsExpected)
 {
     this.expandPaths      = expandPaths;
     this.baseResourceType = baseResourceType;
 }
Exemplo n.º 15
0
 internal IEnumerable <ResourceProperty> GetEntitySerializableProperties(DataServiceProviderWrapper provider, System.Data.Services.Providers.ResourceType entityType)
 {
     return(this.InitializeResourcePropertyCache(provider, entityType).Properties);
 }
Exemplo n.º 16
0
 private IEnumerable <ResourceProperty> GetEntitySerializablePropertiesDeclaredOnTheResourceType(DataServiceProviderWrapper provider, System.Data.Services.Providers.ResourceType entityType)
 {
     return(this.InitializeResourcePropertyCache(provider, entityType).PropertiesDeclaredOnTheType);
 }
Exemplo n.º 17
0
        private ResourcePropertyCache InitializeResourcePropertyCache(DataServiceProviderWrapper provider, System.Data.Services.Providers.ResourceType type)
        {
            ResourcePropertyCache cache;

            if (!this.resourcePropertyCache.TryGetValue(type, out cache))
            {
                cache = new ResourcePropertyCache {
                    Properties = new List <ResourceProperty>()
                };
                foreach (ResourceProperty property in type.Properties)
                {
                    if ((property.TypeKind != ResourceTypeKind.EntityType) || (provider.GetContainer(this, type, property) != null))
                    {
                        cache.Properties.Add(property);
                    }
                }
                cache.PropertiesDeclaredOnTheType = new List <ResourceProperty>();
                foreach (ResourceProperty property2 in type.PropertiesDeclaredOnThisType)
                {
                    if ((property2.TypeKind != ResourceTypeKind.EntityType) || (provider.GetContainer(this, type, property2) != null))
                    {
                        cache.PropertiesDeclaredOnTheType.Add(property2);
                    }
                }
                this.resourcePropertyCache.Add(type, cache);
            }
            return(cache);
        }
Exemplo n.º 18
0
 private static bool ApplyPropertyToExistingNode(ProjectionNode existingNode, ResourceProperty property, System.Data.Services.Providers.ResourceType targetResourceType)
 {
     if (((property == null) || (existingNode.Property == null)) || (property == existingNode.Property))
     {
         ExpandedProjectionNode node = existingNode as ExpandedProjectionNode;
         if (targetResourceType.IsAssignableFrom(existingNode.TargetResourceType))
         {
             VerifyPropertyMismatchAndExpandSelectMismatchScenario(existingNode, property, targetResourceType, node != null);
             existingNode.TargetResourceType = targetResourceType;
             return(true);
         }
         if (existingNode.TargetResourceType.IsAssignableFrom(targetResourceType))
         {
             VerifyPropertyMismatchAndExpandSelectMismatchScenario(existingNode, property, targetResourceType, node != null);
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 19
0
 internal ExpandedProjectionNode FindExpandedNode(ResourceProperty property, System.Data.Services.Providers.ResourceType targetResourceType)
 {
     return(this.nodes.FirstOrDefault <ProjectionNode>(node => ((node.Property == property) && node.TargetResourceType.IsAssignableFrom(targetResourceType))) as ExpandedProjectionNode);
 }
Exemplo n.º 20
0
 internal ExpandedProjectionNode(string propertyName, ResourceProperty property, System.Data.Services.Providers.ResourceType targetResourceType, System.Data.Services.Providers.ResourceSetWrapper resourceSetWrapper, System.Data.Services.Providers.OrderingInfo orderingInfo, Expression filter, int?skipCount, int?takeCount, int?maxResultsExpected) : base(propertyName, property, targetResourceType)
 {
     this.resourceSetWrapper = resourceSetWrapper;
     this.orderingInfo       = orderingInfo;
     this.filter             = filter;
     this.skipCount          = skipCount;
     this.takeCount          = takeCount;
     this.maxResultsExpected = maxResultsExpected;
     this.nodes      = new List <ProjectionNode>();
     this.operations = new List <OperationWrapper>();
     this.hasExpandedPropertyOnDerivedType = false;
 }
Exemplo n.º 21
0
 internal RootProjectionNode(ResourceSetWrapper resourceSetWrapper, OrderingInfo orderingInfo, Expression filter, int? skipCount, int? takeCount, int? maxResultsExpected, List<ExpandSegmentCollection> expandPaths, System.Data.Services.Providers.ResourceType baseResourceType) : base(string.Empty, null, null, resourceSetWrapper, orderingInfo, filter, skipCount, takeCount, maxResultsExpected)
 {
     this.expandPaths = expandPaths;
     this.baseResourceType = baseResourceType;
 }
Exemplo n.º 22
0
        internal ExpandedProjectionNode AddProjectionNode(string propertyName, ResourceProperty property, System.Data.Services.Providers.ResourceType targetResourceType, bool lastPathSegment)
        {
            ProjectionNode existingNode = this.FindNode(propertyName);

            if ((existingNode == null) || !ApplyPropertyToExistingNode(existingNode, property, targetResourceType))
            {
                if (!lastPathSegment)
                {
                    throw DataServiceException.CreateBadRequestError(System.Data.Services.Strings.RequestQueryProcessor_ProjectedPropertyWithoutMatchingExpand(base.PropertyName));
                }
                existingNode = new ProjectionNode(propertyName, property, targetResourceType);
                this.AddNode(existingNode);
            }
            return(existingNode as ExpandedProjectionNode);
        }