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; }
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); }
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); }
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 }); }
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 = "*"; } }
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; }
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; }
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); } }
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; } }
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)); } }
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; }
internal IEnumerable <ResourceProperty> GetEntitySerializableProperties(DataServiceProviderWrapper provider, System.Data.Services.Providers.ResourceType entityType) { return(this.InitializeResourcePropertyCache(provider, entityType).Properties); }
private IEnumerable <ResourceProperty> GetEntitySerializablePropertiesDeclaredOnTheResourceType(DataServiceProviderWrapper provider, System.Data.Services.Providers.ResourceType entityType) { return(this.InitializeResourcePropertyCache(provider, entityType).PropertiesDeclaredOnTheType); }
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); }
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); }
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); }
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; }
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; }
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); }