2011-12-23 12 views
1

如果在db中有char(5)列並且那裏有「ABC」,如果將此列映射到字符串屬性,您會發現nhibernate會將其映射爲「ABC__」,其中下劃線表示的是某種(我沒有檢查過它是什麼ascii代碼)有誰知道如何使nhibernate映射char(n)列爲字符串而不添加尾隨空格?

很長一段時間,現在我們通過將列更改爲varchar並修剪數據庫中的所有條目來解決此問題。如果有一個解決方案讓我們將列保留爲char(n)(如果只是爲了節省我們的一些工作)會更好一些。(

我想我可以嘗試在get和padding上修剪,但那並不是'不要讓我成爲最大的解決方案。

那麼,有沒有一些不錯的方法來配置nhibernate讀取char(n)列到一個字符串,而沒有它讀額外的空白?

謝謝!

回答

3

是和否。您可以使用字段標籤上的公式屬性將值設置爲RTrim(myCharField),但不會綁定它。也就是說,您對該字段所做的任何更改都不會保存到數據庫中。

我真的不明白爲什麼這是一個問題,但。如果你正在用數據層設計你的應用程序,它應該很簡單,在返回它之前添加一個修剪調用到實體屬性的getter方法之前?

+0

修剪到get是不夠的,有時如果您將屬性讀入某個用戶可編輯字段(如datagridview),則修剪後的值會重新設置爲set,並且會話被刷新無用的更新語句將被創建 – 2011-12-23 23:09:41

+0

儘管如此,我只是在想,我可以確保將所有進入該設置的值都放回原來的位置。我只是希望有一些不可思議的方式來配置能夠阻止我每次都這樣做的事情。 – 2011-12-23 23:11:03

+0

「如果會話被刷新無用的更新語句得到創建」除非你的應用程序中有些事情會自動保存實體(與用戶點擊某個按鈕相反),否則無用更新的數量將變得相當可觀。用戶將不得不打開該實體,不做任何更改並單擊保存。我不認爲這經常發生。 – 2011-12-23 23:15:01

0

我不確定你使用的是哪個數據庫,但是我們使用iSeries DB2,而且我們對於尾隨空格也有同樣的問題。我們創建了一個自定義用戶類型來「修剪」來自這些列的值:TrimmedUser.cs gist

這很有效,因爲在進行字符串比較時(即'MYSTRING'等於'MYSTRING'),iSeries DB2不考慮尾部空白。如果您的特定數據庫不適用,則可以在「NullSafeSet」方法中處理該問題,方法是使用數據庫使用的空白字符進行填充。

相關問題