2012-03-30 34 views
2

我有簡單的NHibernate的LINQ查詢(針對MS SQL CE 4):NHibernate的3.2 - MsSqlCeDialect:方言不支持可變極限

var productionStarts = (from p in session.Query<Production>() 
               orderby p.Start descending 
               select p.Start) 
               .Distinct() 
               .Take(maxProductionPlansPerOperation) 
               .ToArray(); 

這在NH 3.2.0.4000拋出異常:

System.NotSupportedException occurred 
    Message=Dialect does not support variable limits. 
    Source=NHibernate 
    StackTrace: 
     at NHibernate.Dialect.Dialect.GetLimitString(SqlString queryString, Nullable`1 offset, Nullable`1 limit, Parameter offsetParameter, Parameter limitParameter) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Dialect\Dialect.cs:line 1707 
    InnerException: 

問題導致「.Take(...)」。如果註釋掉查詢起作用。

它適用於NH 3.1,但它不再適用於NH 3.2。

在一些舊帖子中,我發現建議使用「MsSqlCe40Dialect」,所以我改變了方言但沒有效果。我通過檢查ISessionFactory實例的屬性來驗證NH是否使用了正確的方言。

任何建議如何解決這個問題?

回答

3

這是一個錯誤的話,使用這個定製的方言,使其工作:

public class FixedMsSqlCe40Dialect : MsSqlCe40Dialect 
{ 
    public override bool SupportsVariableLimit 
    { 
    get 
    { 
     return true; 
    } 
    } 
}