Как вы можете остановить NHibernate (через ActiveRecord), добавив this_. к имени таблицы в формуле - PullRequest
3 голосов
/ 20 сентября 2010

Я использую Castle ActiveRecord, который использует NHibernate внизу, и я добавил свойство с формулой следующим образом к одному из моих объектов:

[Property(Formula = "CAST((select count(*) from [User] as u where u.Email = FriendEmail) as bit)")]
public bool FriendRegistered { get; set; }

Проблема в том, что теперь любой запрос для этой сущности завершается неудачей, потому что NHibernate добавляет this_. перед User в формуле. Это приводит к следующему SQL:

CAST((select count(*) from this_.[User] as u where u.Email = this_.FriendEmail) as bit) as formula0_7_

Я пытался использовать другое имя таблицы только для тестирования, и это работало нормально, поэтому я думаю, что это влияет только на таблицы с общим зарезервированным словом, например, "Пользователь".

Я пытался использовать обратные метки, чтобы избежать его, также пытался удалить пробел между "from" и "[User]" и пытался добавить схему (dbo.) Все безуспешно.

Это звучит как ошибка в NHibernate, и я нашел этот отчет об ошибке, который похож: https://nhibernate.jira.com/browse/NH-1617

Я предполагаю, что мой вопрос: есть ли обходной путь к этому или к настройке где-нибудь, или даже способ справиться с этим, о котором я не знаю?

Мы используем NH 2.1.2 и диалект MsSql2008.

Заранее спасибо

Andy

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

В качестве обходного пути для этого я в итоге создал View с именем AllUsers, который просто сделал select * from [User], а затем обновил мою формулу для вас AllUsers вместо [User].

Я знаю что-то вроде хака, но это может помочь другим, которые что-то сделали быстро.

1 голос
/ 20 сентября 2010

В конце этой проблемы JIRA Фабио упоминает RegisterKeyword("int") на диалекте, поэтому я бы попробовал добавить также RegisterKeyword("bit").

...