Я начал использовать NHibernate 3.0 и PostgreSQL для маленького проекта, до сих пор испытание было немного тяжелым из-за снижающегося сайта NHibernate, и я уверен, что этот ответ находится на их веб-сайте где-нибудь.
У меня есть база данных, которая имеет эти два столбца (конечно, существует больше в реальной таблице):
int ID
String Feature
теперь я использую FluentNHibernate, чтобы сделать отображение так что-то вроде этого:
public class MyEntityMap: ClassMap<MyEntity>
{
public MyEntityMap()
{
Id(x => x.ID);
Map(x => x.Feature);
}
}
и LINQ запрашивает для ухода данных
var strucs = from str in session.Query<MyEntity>()
where str.ID < 5
select str;
Запрос генерирует надлежащий SQL-оператор, хорошо вид. Проблема, потому что у меня есть прописные буквы в моих именах столбцов, необходимо перенести их в кавычки, но сгенерированный код SQL выглядит примерно так:
SELECT this_.ID as ID0_0_, this_.feature as feature0_0_,
FROM "MyEntity" this_ WHERE this_.ID < 5
Где столбцы не имеют кавычек вокруг них. Если я выполняю это, я получаю "столбец this_. идентификатор" не найден и т.д.
Кто-либо знает, как я могу заставить NHibernate переносить имена столбцов в кавычки?
Править: Я не могу нижний регистр имена столбцов, поскольку существуют некоторые столбцы, что сторонняя программа должна быть всем в верхнем регистре.
Я пытался добавить.ExposeConfiguration (cfg => cfg. SetProperty ("hbm2ddl.keywords", "автокавычка"), но это, кажется, ничего не делает.
Поскольку hbm2ddl.keywords должен сделать это за вас, а он не работает, я предлагаю вам загрузить исходный код nhibernate и отладить его с вашим проектом.
Вероятно, вы можете начать с точки останова в строке 171 SessionFactoryImpl.cs
if (settings.IsAutoQuoteEnabled)
Взгляните на метод public static void QuoteTableAndColumns (конфигурация конфигурации) на SchemaMetadataUpdater.cs
Надеюсь, что это поможет.
Не используйте символы верхнего регистра в именах таблиц / столбцов. Это решит эту проблему и сделает специальные запросы менее болезненными, поскольку вам не придется постоянно их цитировать.