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 类型,如果你让AccountBalance
是 single
或 decimal
类型会发生什么
我有同样的问题:'session.QueryNHibernate 使用强制转换来确保 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 的映射