2010-11-05 35 views
6

有沒有辦法告訴NHibernate的使用方括號中的所有表和列名(如[MyColumn])產生針對MS SQL Server中的SQL架構導出時?我有一個遺留數據庫,它使用某些列的保留名稱,並且運行使用NH生成的SQL腳本會因此而拋出錯誤。NHibernate:在模式導出中強制方括號?

我想避免必須爲每一列分別指定。

UPDATE:我使用的是正確的話:

MsSqlConfiguration.MsSql2008.ConnectionString(connectionString) 

更新2:@UpTheCreek我指出了正確的方向 - 反引號,這讓我找到了答案,在「NHibernate的行動」 book(p。76):

除了引用反引號中的所有表名和列名之外,沒有辦法強制NHibernate在任何地方使用帶引號的標識符。

+0

你可以寫一個自定義的方言。但個人而言,我只是手動添加反引號;) – UpTheCreek 2010-11-05 09:44:11

回答

11

更簡單的方法:

SchemaMetadataUpdater.QuoteTableAndColumns(config) 

(之前建立的SessionFactory)

這將自動引用所有保留的名稱。

+0

尼斯@詹姆斯.......... .....! – UpTheCreek 2010-11-05 12:46:26

+0

偉大的提示,謝謝! – 2010-11-05 13:29:48

+0

有似乎是一個更好的解決方案在這裏:http://stackoverflow.com/questions/2438491/fluent-nhibernate-and-postgresql-schemametadataupdater-quotetableandcolumns-sy – Nux 2011-09-09 12:53:47

0

你需要使用(或寫)的正確方言爲你的數據庫

+0

我使用正確的方言,請參閱我的問題更新。 – 2010-11-05 09:16:38

2

使用反引號在你的映射文件周圍的列名。 NH應該用你的db方言的正確字符(在你的方括號內)替換它們。

即使用:

<class name="SomeClass" table="`SomeTable`"> 

NB - 它不會有撇號的工作。 backtick位於大多數鍵盤的左上角。

+0

我實際上使用的是Fluent NH,但我已經嘗試過,並且在那裏也反作用。雖然它並沒有真正做到我所要求的(一般方法,而不必爲每個名稱單獨做),但我會接受你的答案,因爲它指向我在NH行動書中的一個頁面,答案在於。謝謝 – 2010-11-05 09:37:15

+0

@Igor:你有沒有找到一個通用的方法?我會雖然你需要爲此自定義dialiect。 – UpTheCreek 2010-11-05 09:40:22

+0

@UpTheCreek:看到我更新的問題。是的,我相信(超過)編寫方言會做的伎倆,但我猜反引號是我目前的問題:) – 2010-11-05 09:42:17