【问题标题】:Nhibernate - Dialect does not support DbType.DoubleNhibernate - 方言不支持 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' 工作正常:/

标签: c# mysql nhibernate dialect


【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多