Nhibernate - Диалект не поддерживает DbType.Double - PullRequest
3 голосов
/ 06 января 2012

Когда я пытаюсь выполнить этот запрос:

        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, но все равно получало точно такое же сообщение об ошибке.

Ответы [ 2 ]

8 голосов
/ 23 февраля 2012

NHibernate использует приведение, чтобы обеспечить тип возврата функции AVG.

Предыдущая версия MySql 5 не поддерживает ввод NUMERIC в выражении CAST. Добавлена ​​поддержка в MySql 5.0.8 .Поэтому вам нужно использовать MySQL5Dialect.

ОРИГИНАЛЬНЫЙ ОТВЕТ :

Я не знаю, поможет ли это, но, как я уже сказал выше, у меня возникла похожая проблема.Покопавшись немного дальше, я обнаружил, что использовал NHibernate.Dialect.MySQLDialect (через FluentNHibernate.Cfg.Db.MySQLConfiguration)

Чтобы исправить мою проблему, вместо этого я использовал MySQL5Dialect, то есть

Fluently.Configure().Database(MySQLConfiguration.Standard
    .Dialect<MySQL5Dialect>()
    .ConnectionString(connectionString))

Надеюсь, это поможет вам, так как я действительно почесал голову на этом ...

0 голосов
/ 26 февраля 2014

изменить диалект в файле конфигурации или при загрузке

...