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); } }