2012-03-30 4 views
2
Iは、(MS SQL CE 4に対して)単純NHibernateはLINQクエリを有する

:NH 3.2.0.4000にスローNHibernateは3.2 - MsSqlCeDialect:方言変数限界をサポートしていない

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

例外:

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"の使用を推奨しているので、方言を変更しましたが効果はありませんでした。私はNHがISessionFactoryインスタンスのプロパティを調べることによって正しい方言を使用していることを確認しました。

これを修正する方法を教えてください。

答えて

3

それはそれを動作させるために、このカスタムの方言を使用し、方言でエラーです:

public class FixedMsSqlCe40Dialect : MsSqlCe40Dialect 
{ 
    public override bool SupportsVariableLimit 
    { 
    get 
    { 
     return true; 
    } 
    } 
} 
関連する問題