2009-10-09 60 views
14

我讀過使用反勾號`應允許使用保留字。我正在使用SQL Server和Fluent NHibernate,並有一個列名稱「文件」。如果我有流利的NHibernate列映射與保留字

"`File" 

映射它嘗試使用

[Fil] 

所以它的正確加括號,但是從最終去掉了「E」。如果我映射它作爲

"`Filee" 

它正確地使用

[File] 

我做錯了什麼或者這是NHibernate還是Fluent Nhibernate中的錯誤?

+0

你有沒有試過做出來與fluentNHibernate任何事情。如果你導出hbm文件fluentNHibernate會爲你寫入table =「'File'」。 – 2009-10-09 23:06:20

回答

19

你需要把`兩側,像這樣:

"`File`" 

由於@Astaar說,完整的語法是:

Map(x => x.File).Column("`File`"); 
+0

哦,我花了很長時間的答案。謝謝! – 2010-05-21 13:14:54

+0

方括號也起作用: Map(x => x.File).Column(「[File]」); – Chronozoa 2015-05-27 18:55:21

+0

@Chronozoa你知道這是否是最近的增加?我發誓,2010年,當我回答這個問題時,我嘗試了這種方式,但沒有奏效。 – 2015-07-06 21:55:27

5

要非常清楚,確切的語法是

Map(x => x.File).Column("`File`"); 
4

有此非手動配置選項,這裏介紹:NHibernate: forcing square brackets in schema export?

以及替代:Fluent NHibernate and PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns - System.NotSupportedException: Specified method is not supported

例如SchemaMetadataUpdater.QuoteTableAndColumns(cfg)這FluentNhibernate看起來像

var config = Fluently.Configure() 
    ... 
    ... 
    .ExposeConfiguration(cfg => SchemaMetadataUpdater.QuoteTableAndColumns); 
+0

我認爲這個解決方案更好,因爲它是一次性設置,而不是在每個地圖中專門添加所有新的列名作爲保留字。 – 2017-10-05 20:56:26

+0

此方法已棄用,不適合我。 – sky91 2018-02-05 06:28:53