Nhibernate - 方言不支持 DbType.Double

Posted

技术标签:

【中文标题】Nhibernate - 方言不支持 DbType.Double【英文标题】:Nhibernate - Dialect does not support DbType.Double 【发布时间】:2012-02-04 10:29:33 【问题描述】:

当我尝试执行这个查询时:

        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? 你能分享一下你是如何配置会话工厂的 Nhibernate 3.2 最新,会话工厂由代码配置。 我不相信 MySql 有 double 类型,如果你让 AccountBalancesingledecimal 类型会发生什么 我有同样的问题:'session.Query().GroupBy(x => x.Country.Name).Select(x => new Key = x.Key, Value = x.Sum(y => y.Amount) );' (金额是小数,我收到关于不支持 DbType.Decimal 的消息) hql: 'select r.Country.Name, sum(r.Amount) from Event r group by r.Country.Name' 工作正常:/ 【参考方案1】:

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))

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Nhibernate - 方言不支持 DbType.Double的主要内容,如果未能解决你的问题,请参考以下文章

此正则表达式方言不支持条件

不存在从 DbType System.DateTimeOffset 到已知 SqlCeType 的映射

NHibernate 和 Oracle Lite

nHibernate 4.1.4没有引用与保留关键字匹配的表名

数据库方言和数据库连接池是什么

对于不支持子查询的 NHibernate-to-LINQ 是不是有任何解决方法?