我有简单的NHibernate Linq查询(针对MS SQL CE 4):
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正在使用正确的方言。
有任何建议如何解决这个问题?
答案 0 :(得分:3)
方言中有错误,请使用此自定义方言使其正常工作:
public class FixedMsSqlCe40Dialect : MsSqlCe40Dialect
{
public override bool SupportsVariableLimit
{
get
{
return true;
}
}
}