NHibernate и передача прямого SQL - PullRequest
1 голос
/ 20 января 2012

Я создаю приложение на c #, которое работает с устаревшей базой данных на основе MSAccess. Существует таблица с типом GUID (числовой, определяемый как идентификатор репликации). Я пытался со многими вариантами сопоставить .NET POCO с этой таблицей, но безуспешно. Все, что я хочу, это вставить в таблицу. Итак, я думал, что просто передам прямое заявление SQL. Я попробовал это утверждение, и оно работало нормально, если я запускаю его из MSACESS sql

insert into message (PK_ID, To) values ({guid {a033df0a-2e0c-4085-a022-e60767e402a4}}, 'myemail@yahoo.com')

Но когда я запускаю его из c # с помощью CreateQuery.ExecuteUpdate () NHibernate ()

Я получу следующую ошибку

HQL: вставить в сообщение (PK_ID, To) значения ({guid {a033df0a-2e0c-4085-a022-e60767e402a4}}, 'myemail@yahoo.com')

строка 1:41 - нет подходящей альтернативы для символа '{' в строке 1:44 нет подходящей альтернативы для символа '{'

И исключение составляет ANTLR

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 20 января 2012

CreateQuery создает запрос NHibernate, который ожидает синтаксис HQL, а {guid {a033df0a-2e0c-4085-a022-e60767e402a4}} не является допустимым HQL.Если вы хотите выполнить необработанный SQL-запрос, вам нужно использовать CreateSQLQuery.

0 голосов
/ 20 января 2012

Большое спасибо, Крис, я потерял несколько часов только потому, что использовал неправильный метод.глупо, и мне было интересно, почему HQL связан с ошибкой.

Но в любом случае, пока я боролся, я нашел решение для сохранения руководства без прямого SQL

Решение:

  1. в объекте POCO, сделайте столбец с GUID строкой
  2. и установите значение столбца равным {guid {05E2C49C-D426-6055-0000-000000008E0D}}

и просто отобразите это как обычно.Это сработало.Я хочу уточнить, что я сталкиваюсь только с проблемой MSAccess.Раньше я много использовал GUID в SQL Server с NHibernate без каких-либо проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...