2009-04-11 155 views
0

我正在構建一個3層wpf應用程序。 我聽說nhibernate最適合web應用程序。我應該使用NHibernate嗎?

我知道如何使用nhibernate。

我應該用還是不用?

有沒有推薦的或者更適合的mapper?

回答

2

NHibernate與Fluent NHibernate似乎是一個非常好的ORM組合,Fluent真的擺脫了繁瑣的XML配置的東西。

我不會冒昧地說,它是最好的解決方案或不是,但其他幾個ORM需要你維護外部配置文件,這些文件真的會破壞重構等有用的東西。

也就是說,它是否適用於WPF應用程序和Web應用程序:通常,Web應用程序比Windows客戶端具有更受限制的過程模型。所以如果NHibernate適合web應用程序,那麼它應該比Windows客戶端更適合。它們是有狀態的,可以訪問更多的內存和CPU的能力。更重要的是,如果您要構建一個3層應用程序,即數據訪問和業務邏輯在服務器上運行,也許您可​​以通過僅作爲Web應用程序的另一種形式的Web服務訪問這些層。

也許如果你能詳細說明你所聽到的關於NHibernate只適用於web應用程序,我們可以瞭解更多。

0

你當然可以使用它,但你必須非常小心你如何管理你的會話(做保持一個會話打開的應用程序的持續時間),特別是和,如何使用延遲初始化(確保你查看分離的對象,否則你可能會發現自己面臨LazyInitializationException,並且沒有明顯的方法來修復它)。

+0

是是的,當然我面對過去 – 2009-04-14 08:27:39

3

如果你沒有花時間理解它的工作原理,那麼你可以用NHibernate來解決問題是公平的。也就是說,學習曲線開始非常淺,但對於一些高級功能來說,其學習曲線相當顯着。

我建議考慮看看:

  • NHibernate In Action:偉大的書學習NHibernate的。不包括最新版本,但嘿「這是互聯網的目的」。
  • NHibernate Query Analyzer:編輯HBM映射文件和查看HQL查詢結果的工具。
  • NHibernate Profiler:NHibernate調試工具。爲您檢測常見的映射問題場景(例如,N + 1個選擇問題),併爲您提供如何解決這些問題的建議。

當然,如果你只是在做基本的ORM操作,那麼看看ActiveRecord。它建立在NHiberate之上,但不需要任何映射要求 - 只需用屬性裝飾對象即可。

+0

功能NHibernate自動映射這些異常不一樣的... 我有一些經驗NHibernate的,我只是想知道爲什麼它recomended僅用於Web appz – 2009-04-14 08:26:17

+0

這聽起來像你知道你我正在談論。如果你有能力,請你詳細說明你的陳述 - *「..如果你沒有花時間瞭解它的工作原理,你可能會遇到NHibernate的麻煩。」* – 2009-11-23 16:29:15

1

NHibernate不綁定到任何特定的環境。您可以像使用Web應用程序一樣輕鬆地將它用於WinForms/WPF應用程序。只需要注意會話管理,但不管環境如何,您都應該這樣做。

0

如果以這種方式提出問題,答案是不要使用它(和任何其他ORM一樣)。 NHibernate在起源之後幾步,甚至這不是一個問題。主要問題是ORMs原則上無法解決阻抗失配問題。它可能會讓你的生活更輕鬆,但這取決於你的項目(我不認爲這是事實)。

我最好專注於經典的客戶端/服務器方案,以便更好地理解事物的工作方式。在開始使用任何ORM之前,您需要知道(至少)C/S體系結構的限制。

+0

我同意你的原則,但我我不確定阻抗不匹配是否真的經常出現以至於不能真正關心。 – 2009-04-16 15:46:21

0

開始設計您的應用程序而不知道您將用於數據持久性的解決方案。它將堅如磐石。