0

上下文:我正在尝试了解 UnitOfWork 模式及其与存储库的关系。

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

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

[1] 这样的设计可以吗?(在所有必需的存储库之间共享 uow_connection )。

由于我的存储库没有实现 IDisposable 并且 NpgsqlConnection 似乎是一个非托管资源,如果垃圾收集器释放我的存储库对象,[3] 连接是否仍然有效?

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

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

我标记了我的问题,以便参考它们。

感谢大家花时间阅读我的问题。

4

1 回答 1

0

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

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

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

我希望它有所帮助。

于 2013-06-16T00:57:03.467 回答