private ResourceType GetResourceType(object instance)
        {
            ResourceType type = null;

            ProviderImplementationSettings.Override(
                s => s.EnforceMetadataCaching = false,
                () => type = this.queryProvider.GetResourceType(instance));
            return(type);
        }
        /// <summary>
        /// Wrapper methods around metadata provider to get the ResourceType
        /// </summary>
        /// <param name="metadataProvider">metadata provider</param>
        /// <param name="typeName">type name</param>
        /// <returns>a resource type or throws</returns>
        protected ResourceType GetResourceType(IDataServiceMetadataProvider metadataProvider, string typeName)
        {
            ResourceType resourceType = null;

            ProviderImplementationSettings.Override(
                s => s.EnforceMetadataCaching = false,
                () => ExceptionUtilities.Assert(metadataProvider.TryResolveResourceType(typeName, out resourceType), "Cannot find a resource type '{0}' in the metadata provider", typeName));

            return(resourceType);
        }
        /// <summary>
        /// Wrapper methods around metadata provider to get the ResourceSet
        /// </summary>
        /// <param name="metadataProvider">metadata provider</param>
        /// <param name="setName">set name</param>
        /// <returns>a resource set or throws</returns>
        protected ResourceSet GetResourceSet(IDataServiceMetadataProvider metadataProvider, string setName)
        {
            ResourceSet resourceSet = null;

            ProviderImplementationSettings.Override(
                s => s.EnforceMetadataCaching = false,
                () => ExceptionUtilities.Assert(metadataProvider.TryResolveResourceSet(setName, out resourceSet), "Cannot find a resource set '{0}' in the metadata provider", setName));

            return(resourceSet);
        }
        /// <summary>
        /// Attempts to get a metadata provider and retrieved the types that derive from the given type
        /// </summary>
        /// <param name="type">The type to get derived types for.</param>
        /// <returns>The derived types</returns>
        protected IEnumerable <ResourceType> GetDerivedTypes(ResourceType type)
        {
            var metadataProvider = this.QueryProvider as IDataServiceMetadataProvider;

            if (metadataProvider == null || !metadataProvider.HasDerivedTypes(type))
            {
                return(Enumerable.Empty <ResourceType>());
            }

            IEnumerable <ResourceType> types = null;

            ProviderImplementationSettings.Override(
                s => s.EnforceMetadataCaching = false,
                () => types = metadataProvider.GetDerivedTypes(type));
            return(types);
        }