SchemaUpdate от NHibernate ничего не делает с базой данных PostgreSQL - PullRequest
4 голосов
/ 31 августа 2011

Я использую NHibernate 3.0 и Postgres 9.0.4.Когда я пытаюсь new SchemaUpdate(cfg).Execute(scriptAction, true); ничего не происходит.Нет исключений, нет вывода SQL (даже при условии Action<string> scriptAction не вызывается) и не созданы таблицы.Если я использую SchemaExport вместо этого, все будет работать как шарм.Поэтому я предполагаю, что мои конфигурации и сопоставления верны.Я читал о проблемах с сочетанием NHibernate 2.something.something и Postgres 8.something и использованием SchemaUpdate.Кто-нибудь может подтвердить, что SchemaUpdate все еще не может использоваться для более новых версий Postgres и NHibernate, или даже лучше, кто-нибудь может подсказать мне решение моей проблемы?

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

РЕДАКТИРОВАТЬ:

На самом деле есть исключения, как я недавно выяснил.SchemaUpdate не выбрасывает их, но сохраняет их в свойстве Exceptions.Я получаю два System.NotSupportedException в NHibernate.Dialect.Dialect.GetDataBaseSchema(DbConnection connection) без дополнительных данных, что говорит о том, что SchemaUpdate не может использоваться с PostgreSQL, но в этом случае кто-то уже должен был это выяснить.Я пробовал оба, .PostgreSQLDialect и .PostgreSQL82Dialect безрезультатно.

Ответы [ 3 ]

2 голосов
/ 02 сентября 2011

Можете ли вы обновить до последней версии? Похоже, компоненты DataProvider / Dialects получили серьезные обновления для Postgre в NHibernate 3.2.0 GA.

С Примечания к выпуску :

Сборка 3.2.0.GA (rev6000)
=============================

** Улучшение
* [NH-2571] - полная поддержка PostgreSQL

Не уверен, поможет ли это. Вам все еще не повезло, если вы используете Fluent (последняя версия работает с NH 3.1.0).

ОБНОВЛЕНИЕ: Какой источник Fluent вы использовали? Я только что скачал с Github , и он прекрасно скомпилирован с NH 3.2.0. Фактически, раздел NHibernate был обновлен 11 августа сообщением «Обновлены сборки NHibernate 3.x до версии 3.2».

Я не могу перейти на новую версию из-за внешней сборки в зависимости от NH 3.1.0. То, что я сделал, используется SchemaExport.Create( Action<string>, false ) для записи DDL в текстовый файл. Я знаю, что сопоставления изменились, и я вручную изменяю базу данных, чтобы она соответствовала тому, что, по мнению NH, должно выглядеть. Это некрасиво, но если у вас есть только несколько изменений в редких случаях, это жизнеспособно.

1 голос
/ 03 октября 2011

вы используете HBM или FluenetNHibernate Mapping, NHibernate 3.2 решит вашу проблему.

, но вы используете Loquacious Code Mapping в NHibernate 3.2, возникла та же проблема.

1 голос
/ 01 сентября 2011

Я в значительной степени сам ответил на вопрос.

Краткий анализ исходного кода nhibernate версии 3.0.0GA показывает, что действительно .PostgreSQLDialect не переопределяет метод GetDataBaseSchema(DbConnection connection) базового класса, следовательно, для диалектов Postgres существует реализация System.NotSupportedException и IDataBaseSchema. , Странно, однако, что в документации NHibernate не упоминается эта маленькая деталь.

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