我有简单的 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 使用的是正确的方言。
有什么建议可以解决这个问题吗?
最佳答案
这是方言中的错误,请使用此自定义方言使其工作:
public class FixedMsSqlCe40Dialect : MsSqlCe40Dialect
{
public override bool SupportsVariableLimit
{
get
{
return true;
}
}
}
关于NHibernate 3.2 - MsSqlCeDialect : Dialect does not support variable limits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944136/