/// <summary>
            /// Tries to generate the Oftype or OfTypeOnly query view for a given entity set and type.
            /// Returns false if the view could not be generated.
            /// Possible reasons for failing are
            ///   1) Passing in OfTypeOnly on an abstract type
            ///   2) In user-specified query views mode a query for the given type is absent
            /// </summary>
            internal bool TryGetGeneratedViewOfType(MetadataWorkspace workspace, EntitySetBase entity, EntityTypeBase type, bool includeSubtypes, out GeneratedView generatedView)
            {
                OfTypeQVCacheKey key = new OfTypeQVCacheKey(entity, new Pair <EntityTypeBase, bool>(type, includeSubtypes));

                generatedView = this.m_generatedViewOfTypeMemoizer.Evaluate(key);
                return(generatedView != null);
            }
            /// <summary>
            /// Note: Null return value implies QV was not generated.
            /// </summary>
            /// <returns></returns>
            private GeneratedView SerializedGeneratedViewOfType(OfTypeQVCacheKey arg)
            {
                GeneratedView generatedView;

                //See if we have collected user-defined QueryView
                if (TryGetUserDefinedQueryViewOfType(arg, out generatedView))
                {
                    return(generatedView);
                }

                //Now we have to generate the type-specific view
                EntitySetBase  entity          = arg.First;
                EntityTypeBase type            = arg.Second.First;
                bool           includeSubtypes = arg.Second.Second;

                if (!TryGenerateQueryViewOfType(entity.EntityContainer, entity, type, includeSubtypes, out generatedView))
                {
                    generatedView = null;
                }

                return(generatedView);
            }
            /// <summary>
            ///     Note: Null return value implies QV was not generated.
            /// </summary>
            /// <returns> </returns>
            private GeneratedView SerializedGeneratedViewOfType(OfTypeQVCacheKey arg)
            {
                GeneratedView generatedView;
                //See if we have collected user-defined QueryView
                if (TryGetUserDefinedQueryViewOfType(arg, out generatedView))
                {
                    return generatedView;
                }

                //Now we have to generate the type-specific view
                var entity = arg.First;
                var type = arg.Second.First;
                var includeSubtypes = arg.Second.Second;

                if (!TryGenerateQueryViewOfType(entity.EntityContainer, entity, type, includeSubtypes, out generatedView))
                {
                    generatedView = null;
                }

                return generatedView;
            }
 /// <summary>
 ///     Tries to generate the Oftype or OfTypeOnly query view for a given entity set and type. 
 ///     Returns false if the view could not be generated.
 ///     Possible reasons for failing are 
 ///     1) Passing in OfTypeOnly on an abstract type
 ///     2) In user-specified query views mode a query for the given type is absent
 /// </summary>
 internal bool TryGetGeneratedViewOfType(
     EntitySetBase entity, EntityTypeBase type, bool includeSubtypes, out GeneratedView generatedView)
 {
     var key = new OfTypeQVCacheKey(entity, new Pair<EntityTypeBase, bool>(type, includeSubtypes));
     generatedView = m_generatedViewOfTypeMemoizer.Evaluate(key);
     return (generatedView != null);
 }
 /// <summary>
 /// Tries to generate the Oftype or OfTypeOnly query view for a given entity set and type. 
 /// Returns false if the view could not be generated.
 /// Possible reasons for failing are 
 ///   1) Passing in OfTypeOnly on an abstract type
 ///   2) In user-specified query views mode a query for the given type is absent
 /// </summary>
 internal bool TryGetGeneratedViewOfType(MetadataWorkspace workspace, EntitySetBase entity, EntityTypeBase type, bool includeSubtypes, out GeneratedView generatedView)
 {
     OfTypeQVCacheKey key = new OfTypeQVCacheKey(entity, new Pair<EntityTypeBase, bool>(type, includeSubtypes));
     generatedView = this.m_generatedViewOfTypeMemoizer.Evaluate(key);
     return (generatedView != null);
 }