与所有存储库共享NpgsqlConnection

时间:2013-06-13 11:46:47

标签: garbage-collection connection repository unit-of-work npgsql

背景: 我试图了解UnitOfWork模式及其与存储库的关系。

但我有一个与NpgsqlConnnection类相关的基本问题。

我的UnitOfWork包含一个私有字段成员,它是一个NpgsqlConnection:uow_connection。 我的存储库有一个构造函数,它将NpgsqlConnection作为参数并将其保存在字段成员中。

[1]是否可以进行这种设计?(在所有所需的存储库之间共享uow_connection)。

由于我的存储库 实现IDisposable,而NpgsqlConnection似乎是一个非托管资源,如果垃圾收集器释放我的存储库对象, [3]将连接还活着吗?

我担心当前事务所需的所有存储库将共享由值传递的相同uow_connection。

[2]是否可以认为如果实现了IDisposable,那么它是一个非托管资源或托管资源可以实现IDisposable并且仍然是托管资源?)

我标记了我的问题,因此很容易引用它们。

感谢所有人花时间阅读我的问题。

1 个答案:

答案 0 :(得分:0)

[1]。不.Npgsql不是线程安全的,您最终可能会在多个线程之间使用共享连接。线程问题是最难跟踪的,因为它们往往会在您期望最少时发生。 (它们也倾向于在您的生产环境中出现更多:))您应该使用创建连接的设计,打开它然后关闭它。 Npgsql池将随时为您提供准备好的连接。

[3]。是的,您的连接将被泄露,直到垃圾收集器清理对象而没有任何强引用。

[2]通常IDisposable只能由包含非托管资源的类实现,因此垃圾收集器将能够正确处理它们。请查看此文档:http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

我希望它有所帮助。