NHibernate 3使用SQL Compact 4.0和FirstOrDefault()抛出NotSupportedException

时间:2011-09-10 00:06:01

标签: linq nhibernate sql-server-ce

我有一段相当简单的代码从数据库中检索对象。这似乎适用于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: 

2 个答案:

答案 0 :(得分:5)

你使用的是错误的方言。使用MsSqlCe40Dialect

答案 1 :(得分:1)

对我来说MsSqlCe40Dialect无效,我不得不在自定义方言中覆盖SupportsVariableLimit以获得分页工作。

public class MyDialect : MsSqlCe40Dialect
{
    public override bool SupportsVariableLimit
    {
        get
        {
            return true; 
        }
    }
}