NH: 2.1.2.4

mapping:
<class name="Export">
        <id column="Id" type="guid">
                <generator class="guid.comb" />
        </id>
        <property name="BatchNumber" not-null="true"
index="Export_BatchNumber_IN" />
        <property name="ShippingNumber" not-null="true"
index="Export_Shipping_IN" />
        <property name="Company" not-null="true" />
        <property name="ItemNumber" not-null="true" />
</class>
<session-factory>
        <property
name="connection.driver_class">NHibernate.Driver.SqlClientDriver</
property>
        <property name="connection.connection_string_name">default</property>
        <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</
property>
        <property name="query.substitutions">true 1, false 0, yes 'Y', no
'N'</property>
        <property
name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory,
NHibernate.ByteCode.LinFu</property>
        <property name="prepare_sql">true</property>
        <property name="adonet.batch_size">100</property>
        <property name="use_proxy_validator">false</property>
        <property name="current_session_context_class">web</property>
        <mapping assembly="The.Domain" />
</session-factory>

queries (a page of data):
//this is what is causing problems. trying to page the sub query
var orderNumbers = DetachedCriteria
        .For<Export>()
        .AddOrder(Order.Asc("ShippingNumber"))
        
.SetProjection(Projections.Distinct(Projections.Property("ShippingNumber")))
        .SetMaxResults(20)
        .SetFirstResult(40); // page 3
var orders = session
        .CreateCriteria<Export>()
        .Add(Subqueries.PropertyIn("ShippingNumber", orderNumbers))
        .AddOrder(Order.Asc("ShippingNumber"))
        .Future<Export>()
        .ConvertToViewModel;
var totalOrders = session
        .CreateCriteria<Export>()
        .SetProjection(Projections.CountDistinct("ShippingNumber"))
        .FutureValue<int>();

exception:
SQL Server does not support an offset
System.NotSupportedException: SQL Server does not support an offset
   at NHibernate.Dialect.MsSql2000Dialect.GetLimitString(SqlString
querySqlString, Int32 offset, Int32 limit)
   at NHibernate.Criterion.SubqueryExpression.ToSqlString(ICriteria
criteria, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters)
   at
NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetWhereCondition(IDictionary`2
enabledFilters)
   at
NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable
persister, CriteriaQueryTranslator translator,
ISessionFactoryImplementor factory, ICriteria criteria, String
rootEntityName, IDictionary`2 enabledFilters)
   at
NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable
persister, ISessionFactoryImplementor factory, CriteriaImpl
rootCriteria, String rootEntityName, IDictionary`2 enabledFilters)
   at NHibernate.Impl.MultiCriteriaImpl.CreateCriteriaLoaders()
   at NHibernate.Impl.MultiCriteriaImpl.List()
   at
NHibernate.Impl.FutureCriteriaBatch.GetResultsFrom(IMultiCriteria
multiApproach)
   at NHibernate.Impl.FutureBatch`2.GetResults()
   at NHibernate.Impl.FutureBatch`2.get_Results()
   at NHibernate.Impl.FutureBatch`2.GetCurrentResult[TResult](Int32
currentIndex)
   at
NHibernate.Impl.FutureBatch`2.<>c__DisplayClass4`1.<GetEnumerator>b__3()
   at
NHibernate.Impl.DelayedEnumerator`1.<get_Enumerable>d__0.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at MillardExport.Core.Controllers.HomeController.Archives(Int32
batchesPage, Int32 ordersPage)

right now this is my hack to get it working:
var orderNumbers = session
        .CreateCriteria<Export>()
        .AddOrder(Order.Asc("ShippingNumber"))
        
.SetProjection(Projections.Distinct(Projections.Property("ShippingNumber")))
        .SetMaxResults(20)
        .SetFirstResult(40)
        .List<string>();

//HACK: the SqlServer 2K dialect doesn't support sub query paging.
var orders = orderNumbers.Count == 0
                                 ? new Export[0]
                                 : session
                                           .CreateCriteria<Export>()
                                           
.Add(Restrictions.InG("ShippingNumber", orderNumbers))
                                           
.AddOrder(Order.Asc("ShippingNumber"))
                                           .Future<Export>()
                                           .ConvertToViewModel();
var totalOrders = session
                .CreateCriteria<Export>()
                .SetProjection(Projections.CountDistinct("ShippingNumber"))
                .FutureValue<int>();

is there a way to create a paged sub query (overriding the dialect?)
for Sql Server 2000?

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to