2013-08-06 71 views
0

我可以在HttpContext中存儲SqlConnection嗎? 我的意思是,如何跨多個班級共享一個SqlConnectionSqlConnection和HttpContext

在我的項目中,每個類都繼承了打開和關閉連接的基本抽象類。 該課程確認SqlConnection是否由另一個課程在該案例中使用。

我可以以另一種方式存儲此連接,而不是HttpContext? 還有另一種方法可以做到這一點,exp。傳遞層之間的連接?

THX

+8

你爲什麼要這樣做?你分享交易環境嗎?爲什麼不能在需要時打開和關閉連接,而不是共享連接? –

+0

你可能*可以*但真的:你爲什麼想要?您希望將'SqlConenction'存儲到'HttpContext'中有什麼好處?我會爭辯說,只有在需要時才應該打開你的'SqlConnection' - 使用'using(SqlConnection conn = new SqlConnection(....)){...}'方法。 –

回答

0

我想知道爲什麼你需要存儲單個SqlConnection。它聞起來不好聞。

如果你真的需要之間共享多個類單一的SqlConnection,依賴注入可能是一個更好的選擇。讓連接工廠實例化一個連接對象並根據需要傳遞它。

否則,讓DBMS擔心控制連接資源。每次需要時創建,打開和關閉連接。

+0

好吧,店鋪連接並不好。你的解決方案是在類之間傳遞連接對象,對吧? – user2336491

0

你會錯誤的方式。除非您需要分享與Lasse V. Karlsen在其評論中提到的交易背景相關的內容,否則您不應該這樣想。如果你擔心性能,並且這就是爲什麼你想保持一個連接打開並共享的原因,那麼它也是錯誤的。

例如, ADO.NET你有連接池。這意味着即使您在連接時致電關閉,它仍未關閉,它將返回到聯繫人。這是一種通過管理它們來跟蹤連接並最大化效率的機制。如果你打開Open獲得一個新的連接,那麼你可能會得到一個在幾分鐘之前就被使用的現有連接,並且這個連接仍然保持打開並返回重用。

所以,如果激勵力量是效率,那麼它不是你應該遵循的路徑。它已經在較低的水平上得到照顧。請參閱http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

+0

我沒有解釋清楚。我確切知道應用程序池的工作原理。問題不在於此。我想用一個連接來表現。如果我保持連接打開,則說明持續時間較短,在另一種情況下(使用每個類的連接) – user2336491