2009-12-30 24 views

回答

1

如果我理解你正確,你想確保字符串持久化到數據庫不超過指定的長度。這聽起來像是商業上的擔憂,儘管可能屬於領域模型或驗證邏輯。

這個問題似乎已經問過,解決方案是一個自定義的nHibernate UserType。請記住,這不是一個自定義的實體類型或基類,這是一個nHibernate可以理解的自定義映射類型。 Automatically truncating strings in NHibernate/SQL Server

如果自定義用戶類型的解決方案是不是根據自己的喜好,那麼你可以實現自定義攔截器,但我不相信這是NHibernate的東西,做這個「外的即用」。但是,nHibernate的優點在於它非常易於擴展,並且爲您的情況實現自定義用戶類型並不困難。

+0

我對此事的看法是,對於每個長度不同的字符串,自定義映射類型都有很多工作要做。 我也認爲我的db字段長度限制不應該在我的域模型中結束,儘管這是當前的解決方案。 我沒有看過自定義攔截器,但我想這將需要爲每個映射字段進行自定義。 我看過上面的文章,但我不喜歡這個解決方案。我還在2007年看到另一篇帖子:https://forums.hibernate.org/viewtopic.php?p=2384695&sid=acd46382cedafad0bc08064e318ecfce,這讓我相信這是可能的。 –

+0

您不必爲每個長度都有一個類型,只需在映射中設置字符串長度屬性即可。如果您試圖避免在映射中設置字符串長度,我認爲您可能不太好運,但我不認爲nHibernate有任何方法可以知道SQL字符串長度設置是什麼。 –

+0

另一種選擇是在模型屬性上使用自定義的nHibernate驗證器屬性作爲另一種方式來執行此操作,如下所示: [截斷(長度= 25)] public string StringProperty {get;設置;} 即使沒有nHibernate驗證器,該屬性也可以用於一個非常簡單的nHibernate攔截器。如果你想要一個讓我知道的例子。 –