当我尝试执行此查询时:
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,但仍然得到相同的错误消息。
答案 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
上的方言