private string DiscriminatorFilterFragment(string alias)
        {
            if (NeedsDiscriminator)
            {
                InFragment frag = new InFragment();

                if (IsDiscriminatorFormula)
                {
                    frag.SetFormula(alias, DiscriminatorFormulaTemplate);
                }
                else
                {
                    frag.SetColumn(alias, DiscriminatorColumnName);
                }

                string[] subclasses = SubclassClosure;
                for (int i = 0; i < subclasses.Length; i++)
                {
                    IQueryable queryable = (IQueryable)Factory.GetEntityPersister(subclasses[i]);
                    if (!queryable.IsAbstract)
                    {
                        frag.AddValue(queryable.DiscriminatorSQLValue);
                    }
                }

                StringBuilder buf = new StringBuilder(50).Append(" and ").Append(frag.ToFragmentString().ToString());

                return(buf.ToString());
            }
            else
            {
                return(string.Empty);
            }
        }
        private string DiscriminatorFilterFragment(string alias)
        {
            const string abstractClassWithNoSubclassExceptionMessageTemplate =
                @"The class {0} can't be instatiated and does not have mapped subclasses; 
possible solutions:
- don't map the abstract class
- map the its subclasses.";

            if (NeedsDiscriminator)
            {
                InFragment frag = new InFragment();

                if (IsDiscriminatorFormula)
                {
                    frag.SetFormula(alias, DiscriminatorFormulaTemplate);
                }
                else
                {
                    frag.SetColumn(alias, DiscriminatorColumnName);
                }

                string[] subclasses = SubclassClosure;
                int      validValuesForInFragment = 0;
                foreach (string t in subclasses)
                {
                    var queryable = (IQueryable)Factory.GetEntityPersister(t);
                    if (!queryable.IsAbstract)
                    {
                        frag.AddValue(queryable.DiscriminatorSQLValue);
                        validValuesForInFragment++;
                    }
                }
                if (validValuesForInFragment == 0)
                {
                    throw new NotSupportedException(string.Format(abstractClassWithNoSubclassExceptionMessageTemplate, subclasses[0]));
                }
                StringBuilder buf = new StringBuilder(50).Append(" and ").Append(frag.ToFragmentString().ToString());

                return(buf.ToString());
            }
            else
            {
                return(string.Empty);
            }
        }