3

当我尝试执行此查询时:

        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。我什至尝试过使用IDlong 类型的字段的平均值,但仍然得到相同的确切错误消息。

4

2 回答 2

8

NHibernate 使用强制转换来确保AVG函数的返回类型。

MySql 之前的版本 5 不支持NUMERICtype inCAST表达式。在 MySql 5.0.8 中添加了支持。所以你需要使用 MySQL5Dialect。

原始答案

我不知道这是否会有所帮助,但正如我上面所说,我遇到了类似的问题。在深入挖掘后,我发现我一直在使用 NHibernate.Dialect.MySQLDialect(通过 FluentNHibernate.Cfg.Db.MySQLConfiguration)

为了解决我的问题,我改用 MySQL5Dialect,即

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

希望这对你有帮助,因为我真的在这个问题上摸不着头脑......

于 2012-02-23T14:10:11.437 回答
0

更改配置文件或引导程序上的方言

于 2014-02-26T13:21:46.010 回答