nHibernate 4.1.4 не цитирует имя таблицы, которое соответствует зарезервированному ключевому слову - PullRequest
0 голосов
/ 09 сентября 2018

Я использую nHibernate 4.1.4 MappingByCode. Мой диалект

public class Dialect : NHibernate.Dialect.MsSql2012Dialect
{
    protected override void RegisterKeywords()
    {
        base.RegisterKeywords();
        RegisterKeyword("user");
    }
}

Моя конфигурация настроена config.SetProperty (Environment.Hbm2ddlKeyWords, "ключевые слова");

У меня есть таблица с именем User.

Ошибка SQL, что недопустимое имя таблицы. Пользователь недопустим. nHibernate не может обернуть его в скобки.

Есть идеи?

1 Ответ

0 голосов
/ 10 сентября 2018

Ключевые слова используются для разных целей ...

нам нужно специальное имя таблицы, экранирующее

5,3. SQL-идентификаторы в кавычках

Вы можете заставить NHibernate заключать в кавычки идентификатор в сгенерированном SQL заключив имя таблицы или столбца в обратные галочки в отображении документ. NHibernate будет использовать правильный стиль цитаты для SQL Диалект (обычно двойные кавычки, но скобки для SQL Server и бэк-тики для MySQL).

<class name="LineItem" table="`Line Item`">
    <id name="Id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="ItemNumber" column="`Item #`"/>
    ...
</class>

т.е. в отображении нам нужно экранировать имя таблицы:

"`user`"

Ключевые слова, определенные в конфигурации диалекта, помогли бы парсеру NH при работе с пользовательскими операторами sql . Например. в formulas, subselects.

...