当我尝试执行此查询时:

        var q = session.QueryOver<Member>();
         q.Select(Projections.Avg<Member>(x => x.AccountBalance));
          var result = q.List();

我得到一个:
Dialect does not support DbType.Double
Parameter name: typecode

有什么想法吗?我使用的是mysql方言,无法想象查询在哪里可能出错,因为它非常简单。
AccountBalance属于double类型。我甚至尝试过使用ID字段的平均值,它是long类型的,但仍然得到相同的错误消息。

最佳答案

nhibernate使用cast来确保AVG函数的返回类型。
MySQL5以前的版本不支持NUMERIC键入CAST表达式。The support was added in MySql 5.0.8所以你需要用mysql5方言。
原始答案:
我不知道这是否有帮助,但正如我在上面所说,我有一个类似的问题。在深入研究之后,我发现我一直在使用nhibernate.dialect.mysqldialect(通过fluentnhibernate.cfg.db.mysqlconfiguration)
为了解决我的问题,我改用mysql5方言。

Fluently.Configure().Database(MySQLConfiguration.Standard
    .Dialect<MySQL5Dialect>()
    .ConnectionString(connectionString))

希望这能帮到你,因为我真的很抓狂…

10-06 02:22