2011-09-10 8 views
2

DBからオブジェクトを取得するかなり簡単なコードがあります。これはSQL Server 2008でうまくいくようですが、SQL Server Compactで爆発します。 SQL Server CEはTOP()をサポートしています - これはNHibernate 3のバグですか?SQL Compact 4.0とFirstOrDefault()でNHibernate 3 NotSupportedExceptionをスローする

コード:

public override Profile GetProfileByName(string name) 
{ 
    using (var tc = TC) 
    { 
     var query = from profiles in tc.Session.Query<Profile>() 
        where profiles.Name == name 
        select profiles; 
     Profile profile = query.FirstOrDefault(); 
     tc.Commit(); 
     return profile; 
    } 
} 

NHibernateの設定:

<property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property> 
<property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property> 

例外:あなたは間違った方言を使用している

System.NotSupportedException occurred 
    Message=Dialect does not support limits. 
    Source=NHibernate 
    StackTrace: 
     at NHibernate.Dialect.Dialect.GetLimitString(SqlString queryString, Nullable`1 offset, Nullable`1 limit, Parameter offsetParameter, Parameter limitParameter) 
    InnerException: 

答えて

5

MsSqlCe40Dialectを使用してください。

+0

私はMsSqlCe40Dialectに切り替えましたが、違いはありません。 – Travis

+0

私はちょうどあなたのコードを試して、それは正常に動作します。最新バージョン(3.2 GA)を使用していますか? "違いがない"場合は、MsSqlCe40Dialectがその1つの機能(ページング)を正確に実装するため、コンパイルまたはデプロイするのを忘れている可能性があります。 –

+0

私はNHibernate.dllのバージョン3.2.0.4000を持っていますので、もう少しこれを試してみて、config.xmlへの変更が読み込まれていることを確認してください。 – Travis

1

私にとってMsSqlCe40Dialectは機能しません。ページングの作業を行うためにカスタム言語のSupportsVariableLimitをオーバーライドしなければなりませんでした。

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