0

上下文: 我想了解UnitOfWork模式及其與存儲庫的關係。與所有存儲庫共享NpgsqlConnection

但我有一個與NpgsqlConnnection類有關的基本問題。

我的UnitOfWork包含一個私有字段成員,它是一個NpgsqlConnection:uow_connection。 而我的存儲庫有一個構造函數,它將NpgsqlConnection作爲參數並將其保存在字段成員中。

[1]可以擁有那種設計嗎?(共享所有之間的uow_connection所需的存儲庫)。

由於我的倉庫實現IDisposable和NpgsqlConnection似乎是一個非託管的ressource,如果垃圾收集器釋放我的倉庫對象,[3]將連接還活着?

我很擔心這個事實,即當前事務的所有需要​​的存儲庫將共享通過值傳遞的相同的uow_connection。

[2]它是確定地認爲,如果IDisposable的實現,所以它是一個非託管的ressource或管理的ressource可以實現IDisposable,仍然是一個管理的ressource?)

我標記我問題,所以很容易引用它們。

謝謝所有花時間閱讀我的問題。

回答

0

[1]。不.Npgsql不是線程安全的,你可能最終會在多個線程之間使用你的共享連接。線程問題是最難追蹤的,因爲它們往往在你期望最少的時候發生。 (他們也傾向於在您的生產環境中出現更多:))您應該使用創建連接的設計,打開並關閉它。 Npgsql池會照顧到你隨時準備好的連接。

[3]。是的,你的連接將被泄漏,直到垃圾收集器清除沒有任何強引用的對象。

[2]通常情況下,IDisposable只能由包含非託管資源的類實現,因此垃圾回收器將能夠正確處理它們。檢查此文檔:http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

我希望它有幫助。