2011-08-31 18 views
4

我使用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的更新版本仍然不可用,甚至更好,任何人都可以指導我解決我的問題嗎?NHibernate的SchemaUpdate在PostgreSQL數據庫上不做任何事情

在此先感謝。

編輯:

其實也有例外,因爲我最近發現。 SchemaUpdate不會拋出它們,而是將它們存儲在它的Exceptions屬性中。 我在NHibernate.Dialect.Dialect.GetDataBaseSchema(DbConnection connection)中得到了兩個System.NotSupportedException,沒有附加數據,這表明SchemaUpdate不適用於PostgreSQL,但是如果那樣的話就會有人已經發現了。我試了兩個,.PostgreSQLDialect.PostgreSQL82Dialect無濟於事。

+1

感謝您提及異常屬於Exceptions屬性。如果它真的把它們扔了,會更好! – muzzamo

回答

2

您可以升級到最新版本嗎?看起來DataProvider/Dialects組件在NHibernate 3.2.0 GA中對Postgre進行了重大升級。

the release notes

構建3.2.0.GA(rev6000)
========================== ===

**改進
* [NH-2571] - 全PostgreSQL的支持

不知道這是否有助於。如果您使用Fluent(最新版本適用於NH 3.1.0),那麼您的運氣仍然不佳。

更新:您使用了哪個流利來源?我只是downloaded from Github和NH 3.2.0編譯得很好。實際上,the NHibernate section已於8月11日更新,消息「更新了NHibernate 3.x程序集到3.2」。

由於外部裝配取決於NH 3.1.0,我無法移動到新版本。我所做的是使用SchemaExport.Create(Action<string>, false)將DDL寫入文本文件。我知道映射已經改變,我手動修改數據庫以匹配NH認爲它應該看起來像。這很醜陋,但是如果你在極少數情況下只有一些變化,這是可行的。

+1

不幸的是我不能。 Fluent 1.2似乎只支持NHibernate 3.1。我不能讓Fluent編譯對NHibernate 3.2 – NullAndVoid

+1

但我認爲,因爲GetDataBaseSchema(DbConnection連接)在本版本中被覆蓋,使用3.2將解決問題。所以謝謝你的回答。 – NullAndVoid

1

我自己回答了這個問題。

版本3.0.0GA的NHibernate的源代碼的簡單檢查發現,確實.PostgreSQLDialect不重寫基類的GetDataBaseSchema(DbConnection connection)方法,因此拋System.NotSupportedException並沒有IDataBaseSchema實施者存在Postgres的方言。奇怪的是,NHibernate文檔沒有提到這個小細節。

1

您使用HBM或FluenetNHibernate Mapping,NHibernate 3.2解決您的問題。

但您在NHibernate 3.2中使用Loquacious代碼映射,發生了同樣的問題。