Nhibernate - Dialect不支持DbType.Double

时间:2012-01-06 17:50:14

标签: c# mysql nhibernate dialect

当我尝试执行此查询时:

        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,但仍然得到相同的错误消息。

2 个答案:

答案 0 :(得分:8)

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

MySql先前版本5不支持NUMERIC表达式中的CAST类型。 The support was added in MySql 5.0.8。所以你需要使用MySQL5Dialect。

原始回答

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

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

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

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

答案 1 :(得分:0)

更改配置文件或bootstrapping

上的方言