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:
私はMsSqlCe40Dialectに切り替えましたが、違いはありません。 – Travis
私はちょうどあなたのコードを試して、それは正常に動作します。最新バージョン(3.2 GA)を使用していますか? "違いがない"場合は、MsSqlCe40Dialectがその1つの機能(ページング)を正確に実装するため、コンパイルまたはデプロイするのを忘れている可能性があります。 –
私はNHibernate.dllのバージョン3.2.0.4000を持っていますので、もう少しこれを試してみて、config.xmlへの変更が読み込まれていることを確認してください。 – Travis