2009-09-19 30 views
0

我工作的項目有一個非常複雜的業務和數據邏輯。我的數據庫中有大約90個表和250個存儲過程。Nhibernate的真實世界複雜的例子

我在Nhibernate上看到過非常基本的樣本,通過它在數據庫上執行操作。

我只想知道,如果我們有一個巨大的複雜邏輯,那麼我們如何使用nhibernate。

另外目前在某些情況下,我在存儲過程級別處理業務邏輯,因此如果存在輕微更改,只需對存儲過程進行一些更改,就可以爲我設置正確的事情。但是,如果我使用Nhibernate,我如何使用存儲過程併爲我創建複雜的情況。

我可以在C#中使用nhibernate幷包含複雜的真實世界場景的示例代碼。

+0

通常,將業務邏輯放入存儲過程並不是最佳實踐。也就是說,NHibernate仍然支持你的場景。 – 2009-09-20 09:43:03

回答

1

不僅可以通過NHibernate調用存儲過程,但ORM使您可以調用這些過程,使得它們的結果集自動轉換爲特定的實體類型。

查看http://softwaredevscott.spaces.live.com/blog/cns!1A9E939F7373F3B7!241.entry的例子。具體來說,您需要使用NHibernate映射文件的<sql-query>元素來設置存儲過程的名稱,輸入參數和返回類型。然後,您可以通過您提供的名稱在代碼中引用此存儲過程。

我不相信你可以調用存儲過程的裸體。必須在NHibernate映射文件中給它們一個名字。

至於複雜性,我完全接受你面臨的挑戰。我給NHibernate在我自己的項目中進行測試運行,以衡量它的性能,以及當你需要靈活性時它會給你帶來多少。到目前爲止,我沒有任何問題。

3

一個ORM如NHibernate的主要目標是從應用程序抽象數據庫訪問並使其與數據庫無關。在存儲過程中擁有業務邏輯意味着使用ORM不會帶來任何價值。使用普通的ADO.NET會更直接和有益。恕我直言,使用NHibernate調用純SQL或存儲過程是沒用的。你只是將一個額外的層添加到你的應用程序,不會帶來任何價值。

但是,如果您將業務邏輯從數據庫中移出並擁有一個很好的對象模型,則將該模型映射到數據庫表時,ORM可能會非常有幫助。

+0

我同意你的看法,但我確實相信ORM將處理95%的數據訪問需求。但是,有些情況下您希望優化ORM可提供的功能,因此在需要時能夠調用SP來幫助您。 – 2009-09-19 19:46:12

+0

我認爲有250個存儲過程!因爲OP的情況並非「需要時」,而只是應用程序的設計方式。 「當需求出現時」將是,如果你有例如一些傳統的存儲過程,你需要在一些罕見的情況下調用。這就是爲什麼我提出在這種情況下使用什麼是ADO.NET最好的原因。 – 2009-09-19 20:04:40