当我尝试执行此查询时:
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使用cast来确保AVG
函数的返回类型。
MySQL5以前的版本不支持NUMERIC
键入CAST
表达式。The support was added in MySql 5.0.8所以你需要用mysql5方言。
原始答案:
我不知道这是否有帮助,但正如我在上面所说,我有一个类似的问题。在深入研究之后,我发现我一直在使用nhibernate.dialect.mysqldialect(通过fluentnhibernate.cfg.db.mysqlconfiguration)
为了解决我的问题,我改用mysql5方言。
Fluently.Configure().Database(MySQLConfiguration.Standard
.Dialect<MySQL5Dialect>()
.ConnectionString(connectionString))
希望这能帮到你,因为我真的很抓狂…