我有一段相当简单的代码从数据库中检索对象。这似乎适用于SQL Server 2008,但随着SQL Server Compact的爆发。 SQL Server CE支持TOP() - 这只是NHibernate 3中的一个错误吗?
代码:
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:
答案 0 :(得分:5)
你使用的是错误的方言。使用MsSqlCe40Dialect
。
答案 1 :(得分:1)
对我来说MsSqlCe40Dialect无效,我不得不在自定义方言中覆盖SupportsVariableLimit以获得分页工作。
public class MyDialect : MsSqlCe40Dialect
{
public override bool SupportsVariableLimit
{
get
{
return true;
}
}
}