背景: 我试图了解UnitOfWork模式及其与存储库的关系。
但我有一个与NpgsqlConnnection类相关的基本问题。
我的UnitOfWork包含一个私有字段成员,它是一个NpgsqlConnection:uow_connection。 我的存储库有一个构造函数,它将NpgsqlConnection作为参数并将其保存在字段成员中。
[1]是否可以进行这种设计?(在所有所需的存储库之间共享uow_connection)。
由于我的存储库 不 实现IDisposable,而NpgsqlConnection似乎是一个非托管资源,如果垃圾收集器释放我的存储库对象, [3]将连接还活着吗?
我担心当前事务所需的所有存储库将共享由值传递的相同uow_connection。
( [2]是否可以认为如果实现了IDisposable,那么它是一个非托管资源或托管资源可以实现IDisposable并且仍然是托管资源?)
我标记了我的问题,因此很容易引用它们。
感谢所有人花时间阅读我的问题。
答案 0 :(得分:0)
[1]。不.Npgsql不是线程安全的,您最终可能会在多个线程之间使用共享连接。线程问题是最难跟踪的,因为它们往往会在您期望最少时发生。 (它们也倾向于在您的生产环境中出现更多:))您应该使用创建连接的设计,打开它然后关闭它。 Npgsql池将随时为您提供准备好的连接。
[3]。是的,您的连接将被泄露,直到垃圾收集器清理对象而没有任何强引用。
[2]通常IDisposable只能由包含非托管资源的类实现,因此垃圾收集器将能够正确处理它们。请查看此文档:http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx
我希望它有所帮助。