NHibernate和传递直接SQL

NHibernate和传递直接SQL,nhibernate,ms-access,Nhibernate,Ms Access,我正在构建c#应用程序,该应用程序处理基于MSAccess的遗留数据库。 有一个表具有GUID类型(数字定义为复制ID)。 我尝试使用许多选项将.NET poco映射到该表,但没有成功。 我所要做的就是插入到一个表中。 所以,我想我将只传递一个直接的sql语句。 我尝试了这个语句,如果从msaccesssql中运行它,效果很好 insert into message (PK_ID, To) values ({guid {a033df0a-2e0c-4085-a022-e60767e402a4}}

我正在构建c#应用程序,该应用程序处理基于MSAccess的遗留数据库。 有一个表具有GUID类型(数字定义为复制ID)。 我尝试使用许多选项将.NET poco映射到该表,但没有成功。 我所要做的就是插入到一个表中。 所以,我想我将只传递一个直接的sql语句。 我尝试了这个语句,如果从msaccesssql中运行它,效果很好

insert into message (PK_ID, To) values ({guid {a033df0a-2e0c-4085-a022-e60767e402a4}}, 'myemail@yahoo.com')
但是当我使用NHibernate的CreateQuery.ExecuteUpdate()从c#运行它时

我将得到以下错误

HQL:在消息(PK_ID,To)中插入值({guid{a033df0a-2e0c-4085-a022-e60767e402a4},'myemail@yahoo.com")

第1行:41字符“{”处没有可行的替代方案 第1行:44字符“{”处没有可行的替代方案

ANTLR是个例外


有什么想法吗?

CreateQuery
创建一个NHibernate查询,该查询需要HQL语法,并且
{guid{a033df0a-2e0c-4085-a022-e60767e402a4}
不是有效的HQL。如果要执行原始SQL查询,需要使用
CreateSQLQuery
非常感谢 我浪费了几个小时,只是因为我用错了方法。 愚蠢的我,我想知道为什么HQL会卷入这个错误

但无论如何,在我挣扎的时候,我找到了一个不用直接SQL保存guid的解决方案

解决办法是:

  • 在POCO对象中,将GUID为字符串的列设置为字符串
  • 并使列的值等于
    {guid{05E2C49C-D426-6055-0000-00000000 8e0d}
  • 然后正常地映射它。 成功了。 我想澄清,我面临的唯一问题是MSAccess。 之前,我在SQL Server和NHibernate中使用了很多GUID,完全没有问题